Конфликтующие / множественные команды запуска между `Dockerfile` и` docker-compose.yml` - PullRequest
0 голосов
/ 21 сентября 2019

Я следовал этому руководству , чтобы запустить приложение Rails 6 и запустить его в Docker (хотя этот вопрос не относится к Rails)

В Dockerfile оно имеетследующая команда

# The main command to run when the container starts. Also
# tell the Rails dev server to bind to all interfaces by
# default.
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]

Отлично, поэтому она дает команду запуска для локального запуска сервера rails.

Позже в той же статье в файле docker-compose.yml показано следующее:

services:
  ...

  web:
    build: .
    command: bash -c "foreman start -f Procfile.dev-server"
    ...

Теперь он предоставляет другую команду для запуска приложения (используя гем foreman, который, вероятно, запускает сервер rails аналогично первой команде).

Какая "команда" действительно выполняет и запускает все?Команда docker-compose переопределяет Dockerfile CMD, когда я запускаю docker-compose up?

1 Ответ

0 голосов
/ 21 сентября 2019

command: в docker-compose.yml, или команда, указанная в конце команды docker run, имеет приоритет.Независимо от того, что вы укажете, контейнер запускает только одну команду и затем завершается.

В типичном образе, который упаковывает какое-то одно приложение, рекомендуется использовать COPY приложениекод (или скомпилированный двоичный файл) и установите соответствующий CMD для его запуска, даже если в процессе разработки вы будете запускать его с измененными настройками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...