Как изменить изображение докера, которое было создано из существующего
Основываясь на руководстве, я создал новое изображение на основе существующего.
теперь у меня нет файла 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.