Как изменить изображение докера, которое было создано из существующего

Основываясь на руководстве, я создал новое изображение на основе существующего.
теперь у меня нет файла Docker, и все происходит, когда начинается контейнер. Я не могу измениться - так оно и выглядит.

Есть ли способ изменить настройки, которые были установлены в файле Docker для базового изображения, которое я использовал?

например: контейнер запускает bash script, когда он запускается, я хочу изменить это.

Ответы

Ответ 1

Чтобы ответить на ваш конкретный q: "контейнер запускает bash script, когда он запускается, я хочу изменить это". Предположим, вы хотите запустить /script.sh (часть изображения) вместо значения по умолчанию, вы можете создать экземпляр контейнера, используя:

docker run --entrypoint /script.sh repo/image

Если script.sh не является частью изображения и/или вам не нужно указывать его явно каждый раз с помощью --entrypoint, как указано выше, вы можете подготовить изображение, которое содержит и запускает ваш собственный script.sh:

  • Создайте пустой каталог и скопируйте или создайте script.sh в нем
  • Создайте Dockerfile со следующим содержимым:

    FROM repo/image
    ADD script.sh /
    ENTRYPOINT /script.sh
    
  • docker build -t="myimage" .

  • docker run myimage

Примечания:

  • При запуске контейнера (шаг 4) больше не нужно указывать --entrypoint, так как мы его по умолчанию помещаем в Dockerfile.
  • Это действительно так просто; нет необходимости подписываться на докер-концентратор или любую такую ​​вещь (хотя она, конечно, рекомендуется в срок;)

Ответ 2

Если запуск контейнера с помощью команды из учебника не удался, ваше базовое изображение скорее всего представило ENTRYPOINT. Любые команды, которые вы указываете для docker run, будут добавлены в качестве параметров команды ENTRYPOINT. Таким образом, с учетом ENTRYPOINT, например, /usr/bin/somescript,

docker run -d --name newguest -p 8080:80 mymod/httpd:v1 /usr/sbin/httpd -D FOREGROUND

приведет к выполнению контейнера

/usr/bin/somescript /usr/sbin/httpd -D FOREGROUND

вместо

/usr/sbin/httpd -D FOREGROUND

Чтобы избавиться от ENTRYPOINT, используйте опцию --entrypoint:

docker run --entrypoint "" -d --name newguest -p 8080:80 mymod/httpd:v1 /usr/sbin/httpd -D FOREGROUND

Ответ 3

Просто создайте новый файл Docker в пустом каталоге. Запустите файл Docker с помощью

FROM repo/image 

где 'repo/image' - это идентификатор изображения, которое вы используете в настоящее время.

и добавьте свои настройки ниже.

Таким образом вы создаете новое изображение, основанное на другом изображении.

В частности, чтобы изменить команду, которая запускается при запуске, введите строку CMD и/или ENTRYPOINT.