首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

常见问题 | Frequently asked questions (Compose)

如果你在这里没有看到你的问题,请随时放下#docker-compose在 freenode IRC 上投递并询问社区。

我可以控制服务启动顺序吗?

是 - 请参阅控制启动顺序。

为什么我的服务需要10秒才能重新创建或停止?

编写停止尝试,通过发送SIGTERM.然后它等待一个默认超时时间为10秒超时后,SIGKILL被送到容器里强行杀死它。如果您正在等待此超时,这意味着当容器收到SIGTERM信号。

已经有很多关于这个问题的文章处理信号装在容器里。

若要解决此问题,请尝试以下操作:

  • 确保使用的 JSON 形式CMDENTRYPOINT在你的文件里。例如,使用["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环境变量...

uprun以及start之间有什么区别?

通常情况下,你想使用docker-compose up。使用up启动或重新启动在定义的所有服务docker-compose.yml。在默认的“附加”模式下,您将看到所有容器中的所有日志。在“分离”模式(-d)中,Compose 在启动容器后退出,但容器继续在后台运行。

docker-compose run命令用于运行“一次性”或“临时”任务。它需要您想运行的服务名称,并且仅启动正在运行的服务所依赖的服务的容器。使用run运行测试或执行管理任务,如删除或添加数据的数据量的容器。run命令的作用就像docker run -ti打开容器的交互式终端,并返回与容器中进程的退出状态匹配的退出状态。

docker-compose start命令仅用于重新启动之前创建但已停止的容器。它从不创建新的容器。

我可以用json代替YAML作为我的撰写文件吗?

YAML 是 json 的超集。所以任何 JSON 文件都应该是有效的 YAML 。若要在撰写时使用 JSON 文件,请指定要使用的文件名,例如:

代码语言:javascript
复制
docker-compose -f docker-compose.json up

我是否应该将我的代码包含在COPY/ADD还是一卷书?

您可以使用COPY中的ADD指令将代码添加到图像中Dockerfile。如果您需要将代码与 Docker 映像一起重定位,例如在将代码发送到其他环境(生产,CI 等)时,这非常有用。

您应该使用volume如果您想要对代码进行更改,并且看到它们立即被反映出来,例如,当您正在开发代码,并且您的服务器支持热代码重新加载或活动重新加载时。

在某些情况下,您可能会同时使用这两种方法。您可以使用COPY,并使用volume在开发过程中,在撰写文件中包含来自主机的代码。卷覆盖图像的目录内容。

在哪里可以找到撰写文件的示例?

撰写文件

  • 安装组合
  • 从Django开始
  • 从Rails开始
  • 从WordPress开始
  • 命令行引用
  • 合成文件引用

扫码关注腾讯云开发者

领取腾讯云代金券