
Я хочу проверить образ 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
скорее всего, для других образов.