Dockerfile和docker-compose.yml之间存在冲突/多个启动命令

时间:2019-09-20 23:21:42

标签: docker docker-compose

我遵循this tutorial来启动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"
    ...

现在,它提供了一个 different 命令来启动应用程序(使用foreman gem,它可能以与第一个命令类似的方式启动Rails服务器)。

哪个“命令”是实际执行并启动所有命令的命令?当我运行Dockerfile时,docker-compose命令是否覆盖CMD docker-compose up吗?

1 个答案:

答案 0 :(得分:0)

command:中的docker-compose.ymldocker run命令末尾给出的命令优先。无论您指定什么内容,一个容器只运行一个命令,然后退出。

在封装了单个应用程序的典型映像中,最佳实践是将应用程序代码(或编译后的二进制文件)COPY放入其中并设置合适的CMD来运行它,即使您正在开发中将以修改后的设置运行它。