Что может привести к тому, что образ Docker не будет запускать команду, указанную в файле docker-compose.yaml?
У меня есть такой Dockerfile:
FROM python:2.7
ENV PYTHONUNBUFFERED 1
RUN mkdir -p /code
WORKDIR /code
COPY ./pip-requirements.txt pip-requirements.txt
COPY ./code /code/
RUN pip install --trusted-host pypi.python.org -r pip-requirements.txt
И docker-composeФайл .yaml, например:
version: '3'
services:
worker:
container_name: myworker
image: registry.gitlab.com/mygitlabuser/mygitlabproject:latest
network_mode: host
build:
context: .
dockerfile: Dockerfile
command: ./myscript.py --no-wait --traceback
Если я собираю и запускаю это локально с:
docker-compose -f docker-compose.yaml up
Сценарий выполняется в течение нескольких минут, и я получаю ожидаемый результат.Запуск docker ps -a
показывает, что контейнер с именем «myworker» был создан, как и ожидалось.
Теперь я хочу загрузить этот образ в репозиторий и развернуть его в производственной среде, загрузив и запустив его на удаленном сервере.
Я перестраиваю образ с помощью:
docker-compose -f docker-compose.yaml build
и затем загружаю его с:
docker login registry.gitlab.com
docker push registry.gitlab.com/myuser/myproject:latest
Это успешно, и я подтверждаю, что новое изображение существует в моем gitlabхранилище образов.
Затем я подключаюсь к производственному серверу и загружаю образ с:
docker login registry.gitlab.com
docker pull registry.gitlab.com/myuser/myproject:latest
Опять же, это успешно с отчетом Docker:
Status: Downloaded newer image for registry.gitlab.com/myuser/myproject:latest
Запуск docker images
и docker ps -a
не отображают ни существующие изображения, ни контейнеры.
Однако здесь все становится странно.Если я тогда попытаюсь запустить этот образ с:
docker run registry.gitlab.com/myuser/myproject:latest
, похоже, ничего не произойдет.Выполнение docker ps -a
показывает один контейнер с командой "python2" и именем "gracious_snyder", который не соответствует моему изображению.В нем также говорится, что контейнер вышел сразу после запуска.Запуск docker logs gracious_snyder
ничего не показывает.
Что здесь происходит?Почему мой образ не выполняет правильную команду?Это почти как игнорирование всех параметров в моем файле docker-compose.yaml и возврат к настройкам по умолчанию в базовом образе python2.7, но я не знаю, почему это произошло, потому что я построил образ с помощью docker-compose, и онработает нормально локально.
Я использую Docker версии 18.09.6, сборка 481bc77 на локальных и удаленных хостах и сборку docker-версии 1.11.1, сборка 7c5d5e4 на моем локальном хосте.