我正在尝试让 docker-compose :
我发现我必须对该服务的 Dockerfile 执行 docker build
,然后为要使用的新映像执行 docker-compose up <service-name>
。
有没有办法只使用 docker-compose 来做到这一点?
以下是我为获取要在 docker-compose 中使用的新图像而采取的漫长曲折路径。
这是当前的 docker-compose 设置。
Container Repository Tag Image Id Size
-----------------------------------------------------------------------
books-server books-server v06 c35c65375942 13.37 MB
hasura-proxy hasura/graphql-engine v1.3.2 a499c4b91ba4 48.34 MB
nginx-proxy jwilder/nginx-proxy latest fcb5a96e19c1 160.6 MB
postgres postgres 12 7b9cf7d827b4 314 MB
我对 books-server 进行了更改,底层源代码被编译为可执行文件,我希望重建该映像并在 docker-compose 中使用。
如果我发出:
> docker-compose up --detach --build books-server
结果:
books-server is up-to-date
试试:
> docker-compose build --no-cache books-server
结果:
books-server uses an image, skipping
试试:
> docker-compose up --build --no-deps --force-recreate -d books-server
结果:
Recreating books-server ... done
检查:
> docker-compose images
结果
Container Repository Tag Image Id Size
-----------------------------------------------------------------------
books-server books-server v06 c35c65375942 13.37 MB
hasura-proxy hasura/graphql-engine v1.3.2 a499c4b91ba4 48.34 MB
nginx-proxy jwilder/nginx-proxy latest fcb5a96e19c1 160.6 MB
postgres postgres 12 7b9cf7d827b4 314 MB
books-server 的图片 id 仍然是 c35c65375942
试试:
> docker-compose restart books-server
Restarting books-server ... done
检查图片:
仍在使用图片 ID c35c65375942
> docker-compose images
Container Repository Tag Image Id Size
-----------------------------------------------------------------------
books-server books-server v06 c35c65375942 13.37 MB
hasura-proxy hasura/graphql-engine v1.3.2 a499c4b91ba4 48.34 MB
nginx-proxy jwilder/nginx-proxy latest fcb5a96e19c1 160.6 MB
postgres postgres 12 7b9cf7d827b4 314 MB
试试:
我切换到 books-server 目录,使用相同的标签 (books-server:v06
) 在其 Dockerfile 上执行 docker build
> cd ..\books-server\
> docker build -t books-server:v06 .
结果:
构建了一个新图像 55ea56a70aa9
并标记了
Sending build context to Docker daemon 73.43MB
Step 1/21 : FROM google/dart-runtime-base AS dart-runtime
...<snip>...
Removing intermediate container bff4c43f6bf0
---> 55ea56a70aa9
Successfully built 55ea56a70aa9
Successfully tagged books-server:v06
我检查docker images
:
并看到标签已从图像 c35c65375942
中删除并提供给 55ea56a70aa9
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> d50d6ccf14a1 About a minute ago 798MB
books-server v06 55ea56a70aa9 About a minute ago 13.4MB
<none> <none> c35c65375942 31 minutes ago 13.4MB
我检查docker-compose images
:
Container Repository Tag Image Id Size
-----------------------------------------------------------------------
books-server <none> <none> c35c65375942 13.37 MB
hasura-proxy hasura/graphql-engine v1.3.2 a499c4b91ba4 48.34 MB
nginx-proxy jwilder/nginx-proxy latest fcb5a96e19c1 160.6 MB
postgres postgres 12 7b9cf7d827b4 314 MB
books-server 仍在使用旧图像,现在匿名运行,因为图像标签已被重新分配到 55ea56a70aa9
我尝试在 docker-compose 中重启服务:
> docker-compose restart books-server
Restarting books-server ... done
我检查了 docker-compose 图像,发现旧图像 c35c65375942
仍在使用。
Container Repository Tag Image Id Size
-----------------------------------------------------------------------
books-server <none> <none> c35c65375942 13.37 MB
hasura-proxy hasura/graphql-engine v1.3.2 a499c4b91ba4 48.34 MB
nginx-proxy jwilder/nginx-proxy latest fcb5a96e19c1 160.6 MB
postgres postgres 12 7b9cf7d827b4 314 MB
我重新启动 docker-compose 并最终看到正在使用的新映像 (55ea56a70aa9
):
> docker-compose up -d books-server
Recreating books-server ... done
> docker-compose images
Container Repository Tag Image Id Size
-----------------------------------------------------------------------
books-server books-server v06 55ea56a70aa9 13.37 MB
hasura-proxy hasura/graphql-engine v1.3.2 a499c4b91ba4 48.34 MB
nginx-proxy jwilder/nginx-proxy latest fcb5a96e19c1 160.6 MB
postgres postgres 12 7b9cf7d827b4 314 MB
是否有 docker-compose
命令可以重建服务映像并重新启动该服务,还是必须使用 docker build Dockerfile
和 docker-compose up <service>
来完成?
感谢您的见解。
答案 0 :(得分:2)
多亏了 timsmelik 评论,我意识到我没有在 docker-compose.yml 的 build:
服务中使用 books-server
指令,只有一个标记的图像名称,docker-compose 不容易产生新版本时替换/使用。
删除 image:
指令并将其替换为相对的 build:
目标,
一个简单的 docker-compose up --build -d books-server
正在重建服务并在 docker-compose 项目中使用它。
books-server:
# ↓ new build directive
build: ../books-server
# ↓ old image directive, removed
# image: books-server:v06
container_name: books-server
<other settings>...