使用Docker Compose构建单个容器

199

如果我使用 Compose,运行 docker-compose build 命令,它将重新构建所有容器 :

> docker-compose build
Building elasticsearch
Step 1 : FROM elasticsearch:2.1
 ---> a05cc7ed3f32
Step 2 : RUN /usr/share/elasticsearch/bin/plugin install analysis-phonetic
 ---> Using cache
 ---> ec07bbdb8a18
Successfully built ec07bbdb8a18
Building search
Step 1 : FROM php:5.5.28-fpm
 ---> fcd24d1058c0
...

即使使用缓存进行重建,这也需要时间。所以我的问题是:

有没有一种方法可以仅重建特定的一个容器?

4个回答

389
是的,使用服务的名称:
docker-compose build elasticsearch

19
使用 docker-compose build --no-cache elasticsearch 命令可以强制重新构建现有的镜像,同时不使用缓存。 - Thomas Vangelooven

56
docker-compose up -d --no-deps --build <service_name>

来源


1
为什么你使用 -no-deps? - undefined

45

如果您想在docker-compose文件中运行和重建特定的服务,则可以按照@dnephin提出的方式进行操作,例如:

如果您希望在docker-compose文件中运行和重新创建特定的服务,则可以像@dnephin提出的那样操作,如下所示:

$ docker-compose up -d --force-recreate --no-deps --build service_name

假设您的docker-compose.yml文件如下所示

version: '3'
services:
  service_1:
      .....
  service_2:
      .....

1
如果某个程序依赖于其他程序,那么它只有在所有依赖的程序都运行成功后才能正常工作。否则,它将无法正常运行。 - jemiloii
确实问题是关于重新创建那个的,我已经更新了答案@MariusVanNieuwenhuyse - Rambou
为什么要使用force-recreate?它是重新创建全部还是只重新创建那个建筑服务? - undefined

3
你可以在docker-compose中添加--no-start标志,稍后再启动,因为你只需要构建一个服务。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接