©
Ce document utilise Manuel du site Web PHP chinois Libérer
如果你在这里没有看到你的问题,请随时放下#docker-compose
在 freenode IRC 上投递并询问社区。
是 - 请参阅控制启动顺序。
编写停止尝试,通过发送SIGTERM
.然后它等待一个默认超时时间为10秒超时后,SIGKILL
被送到容器里强行杀死它。如果您正在等待此超时,这意味着当容器收到SIGTERM
信号。
已经有很多关于这个问题的文章处理信号装在容器里。
若要解决此问题,请尝试以下操作:
确保使用的 JSON 形式CMD
和ENTRYPOINT
在你的文件里。例如,使用["program", "arg1", "arg2"]
不"program arg1 arg2"
使用字符串窗体使 Docker 使用bash
不能正确处理信号。Composet 总是使用 JSON 表单,所以如果您覆盖了撰写文件中的命令或入口点,请不要担心。
如果可以,修改正在运行的应用程序,为其添加显式信号处理程序SIGTERM
.
设置为stop_signal
应用程序知道如何处理的信号:web:build:,stop_signal:SIGINT.
如果您无法修改应用程序,请将该应用程序包装在轻量级
init 系统(如 s6)或信号代理(如 dumb-init 或 tini )中。这些包装都会由SIGTERM
妥善处理。
组合使用项目名称为项目的所有容器和其他资源创建唯一标识符。若要运行项目的多个副本,请使用-p
命令行选项或者COMPOSE_PROJECT_NAME
环境变量...
up
,run
以及start
之间有什么区别?通常情况下,你想使用docker-compose up
。使用up
启动或重新启动在定义的所有服务docker-compose.yml
。在默认的“附加”模式下,您将看到所有容器中的所有日志。在“分离”模式(-d
)中,Compose 在启动容器后退出,但容器继续在后台运行。
docker-compose run
命令用于运行“一次性”或“临时”任务。它需要您想运行的服务名称,并且仅启动正在运行的服务所依赖的服务的容器。使用run
运行测试或执行管理任务,如删除或添加数据的数据量的容器。run
命令的作用就像docker run -ti
打开容器的交互式终端,并返回与容器中进程的退出状态匹配的退出状态。
docker-compose start
命令仅用于重新启动之前创建但已停止的容器。它从不创建新的容器。
是 YAML 是 json 的超集。所以任何 JSON 文件都应该是有效的 YAML 。若要在撰写时使用 JSON 文件,请指定要使用的文件名,例如:
docker-compose -f docker-compose.json up
COPY
/ADD
还是一卷书?您可以使用COPY
中的ADD
指令将代码添加到图像中Dockerfile
。如果您需要将代码与 Docker 映像一起重定位,例如在将代码发送到其他环境(生产,CI 等)时,这非常有用。
您应该使用volume
如果您想要对代码进行更改,并且看到它们立即被反映出来,例如,当您正在开发代码,并且您的服务器支持热代码重新加载或活动重新加载时。
在某些情况下,您可能会同时使用这两种方法。您可以使用COPY
,并使用volume
在开发过程中,在撰写文件中包含来自主机的代码。卷覆盖图像的目录内容。
github 上有很多编写文件的例子。
安装组合
从Django开始
从Rails开始
从WordPress开始
命令行引用
合成文件引用