【发布时间】:2019-02-13 04:12:10
【问题描述】:
我正在使用 docker-compose 进行开发项目。我的 docker compose 文件中定义了 6 个服务。每当我进行更改时,我一直在使用以下脚本来重建图像。
#!/bin/bash
# file: rebuild.sh
docker-compose down
docker-compose build
docker-compose up
我正在寻找一种方法来减少构建时间,因为构建和重新启动所有服务似乎没有必要,因为我通常只更改一个模块。我在 docker-compose 文档中看到,您可以通过在例如之后指定服务名称来为单个服务运行命令。 docker-compose build myservice.
在另一个终端窗口中,我尝试了docker-compose build myservice && docker-compose restart myservice,而另一个./rebuild.sh 命令在原始终端中保持打开状态。在./rebuild.sh 终端窗口中,我看到所有初始化消息都重新打印到标准输出,所以我知道它正在重新启动该服务,但代码更改不存在。我究竟做错了什么?我只想重建并重新启动一个服务。
【问题讨论】:
-
您重建图像以向容器提供数据?你为什么不挂载卷呢?
-
我知道绑定卷,您可以在其中指向您的源代码目录,但对于简单的项目,我只想知道是否有一种简单的方法来重建/重新启动单个服务。尽量不要太复杂。
-
您是否考虑过在您的重建脚本中使用参数? ./rebuild.sh myservice 之类的东西。如果你想这样做,你可以使用 $1 变量来读取作为参数接收的服务的名称。
-
docker-compose up 和 down 命令不使用服务名称作为参数。这就是我尝试使用 docker-compose restart 的原因。我也试过 docker-compose stop/start 但它实际上与重新启动相同。
-
试试 docker-compose up -d --force-recreate --build myservice 。请注意,-d 用于分离模式,-d 用于强制重新创建,即使您的代码没有更改,-build 用于在启动之前构建您的图像,至少是您的服务名称。在此处阅读更多信息docs.docker.com/compose/reference/up
标签: docker-compose