我遵循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
吗?
答案 0 :(得分:0)
command:
中的docker-compose.yml
或docker run
命令末尾给出的命令优先。无论您指定什么内容,一个容器只运行一个命令,然后退出。
在封装了单个应用程序的典型映像中,最佳实践是将应用程序代码(或编译后的二进制文件)COPY
放入其中并设置合适的CMD
来运行它,即使您正在开发中将以修改后的设置运行它。