Назад | Перейти на главную страницу

Как я могу переопределить CMD при запуске образа докера?

Я хочу проверить образ докера, созданный кем-то другим с указанием точки входа и cmd, например:

ENTRYPOINT ["/usr/sbin/apache2ctl"]
CMD ["-D", "FOREGROUND"]

В настоящее время я делаю:

docker run --interactive --tty --entrypoint=/bin/bash $IMAGE --login

Есть ли способ переопределить CMD, чтобы он был пустым (поэтому мне не нужно использовать "--login")?

Вы можете просто войти через docker run -it --entrypoint=/bin/bash $IMAGE -i (вы запустите новый контейнер из образа и получите оболочку bash в интерактивном режиме), затем выполните команду точки входа в этом контейнере.

Затем вы можете проверить работающий контейнер в том состоянии, в котором он должен работать.

РЕДАКТИРОВАТЬ: Начиная с Docker 1.3 вы можете использовать exec для запуска процесса в работающем контейнере. Запустите контейнер, как обычно, а затем введите его, выполнив:

docker exec -it $CONTAINER_ID /bin/bash

Предполагая, что bash установлен, вам будет предоставлен доступ оболочки к работающему контейнеру.

Видеть: https://docs.docker.com/engine/reference/run/#overriding-dockerfile-image-defaults

Соответствующая часть:

CMD (команда или параметры по умолчанию). Вспомните необязательную КОМАНДУ в командной строке Docker:

$ docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

Эта команда является необязательной, потому что человек, создавший ОБРАЗ, возможно, уже предоставил КОМАНДУ по умолчанию с помощью Dockerfile CMD. Как оператор (человек, запускающий контейнер из образа), вы можете переопределить эту CMD, просто указав новую КОМАНДУ.

Если изображение также указывает ENTRYPOINT, тогда CMD или COMMAND добавляются в качестве аргументов к ENTRYPOINT.

Итак, чтобы делать то, что вы хотите, вам нужно только укажите cmd и переопределите с помощью /bin/bash. Не совсем «пустой», но он справляется со своей работой на 99%.

Для любого, кто приходит сюда, чтобы переопределить точку входа И команду, чтобы передать другую команду, например запустите bash вместо сценария точки входа, а затем запустите какую-то другую команду с параметрами (мне было не ясно из других ответов):

 docker run [other options] --entrypoint '/bin/sh' $IMAGE -c 'npm link gulp gulp-sass gulp-sourcemaps'

-c 'npm link ...' параметр для /bin/sh поэтому здесь вы можете передать любую команду, которую хотите запустить в контейнере. /bin/sh для альпийских изображений, /bin/bash скорее всего для других изображений.