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