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

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

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

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

В настоящее время я занимаюсь:

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

Есть ли способ переопределить CMD, сделав его пустым (чтобы не приходилось использовать «--login»)?

решение1

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

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

EDIT: Начиная с Docker 1.3 вы можете использовать execдля запуска процесса в работающем контейнере. Запустите свой контейнер, как обычно, а затем войдите в него, выполнив:

docker exec -it $CONTAINER_ID /bin/bash

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

решение2

Видеть: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% выполняет свою работу.

решение3

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

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

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

Связанный контент