我们说我有一个 docker-compose.yml 文件,其中包含五个应用程序&我是通过docker-compose up -d
启动的。现在有一个一个这些应用程序的更新,我想使用它们。所以我拉出这个更新的图像......我怎么能停止这个旧容器而不停止其他四个容器?
docker-compose down && docker-compose up -d
会停止并重新启动我的所有容器,这样就错了。docker stop app_1 && docker run app_1
会起作用,但似乎错误"对我而言,因为它没有docker-compose
命令。那么" docker-way"这样做?
答案 0 :(得分:5)
再次运行docker-compose up -d
(之前不使用down
/ stop
/ kill
)。
初始docker-compose.yml
:
version: "2"
services:
db1:
command: mongod
image: mongo:3.2.4
ports:
- "27020:27017"
db2:
command: mongod
image: mongo:3.2.4
ports:
- "27021:27017"
更新db2
:
version: "2"
services:
db1:
command: mongod
image: mongo:3.2.4
ports:
- "27020:27017"
db2:
command: mongod
image: mongo:3.2.6
ports:
- "27021:27017"
再次运行docker-compose up -d
:
Pulling db2 (mongo:3.2.6)...
3.2.6: Pulling from library/mongo
47994b92ab73: Pull complete
a3ed95caeb02: Pull complete
71b6becd9768: Pull complete
7d5d40f9dc7b: Pull complete
9dc152e647de: Pull complete
3f1f69340f17: Pull complete
82a29b50f1d2: Pull complete
97869c61a050: Pull complete
50aa2bf3bccc: Pull complete
03913f2c5b05: Pull complete
Digest: sha256:29ee114c0ce96494553cd72f18d92935b36778b77bce167fc9962e442d8c7647
Status: Downloaded newer image for mongo:3.2.6
composetest_db1_1 is up-to-date
Recreating composetest_db2_1
输出的最后两行显示预期的行为。
答案 1 :(得分:2)
在一个用例中,接受的答案不起作用:
假设您有 4 个容器,其中 2 个有新版本,并且您只想更新/重启其中一个。
如果您再次执行 docker-compose up -d
,这将更新两个容器。
如果您只想定位一个特定的容器,可以分两步完成:
docker-compose pull
(这只会下载图像,不执行任何其他操作)docker-compose up -d --no-deps name_of_your_container
--no-deps
对于避免错误地重新启动更新容器的依赖项很重要。
答案 2 :(得分:1)
很老的问题,但如果图像在 docker hub 上发生了更改并且我们不更改 docker 文件,则答案似乎不起作用,例如如果我在上面的示例中使用最新版本的 mongo (mongo:latest) 并且“latest”标签在 Docker Hub 中从 3.2.4 移动到 3.2.6,则不会仅通过运行 {{1}就我所见...