Docker compose up --force-recreate --build 使用缓存,但我不希望它这样做

For*_*stG 35 docker docker-compose

我有以下命令来强制重新创建所有容器:

docker-compose up --force-recreate --build 
Run Code Online (Sandbox Code Playgroud)

但是,我仍然看到以下几行*:

Step 6/10 : RUN cp environment-prod-docker.js environment.js
 ---> Using cache
 ---> e9a2354577ef
Step 7/10 : RUN cat environment.js
 ---> Using cache
 ---> ccbc732030ea
Step 8/10 : RUN npm ci --only=production
 ---> Using cache
 ---> 6baeabd30cf7
Run Code Online (Sandbox Code Playgroud)

我怎样才能禁用该缓存?(例如,它不会重建我的应用程序。)

我已经发现,在给定容器上使用此特定命令可以重新构建它:

 docker-compose build --no-cache
Run Code Online (Sandbox Code Playgroud)

但由于特定原因,我需要使用单行 build'n'start 命令,那么有没有什么方法可以用 来生成它docker-compose up

我正在使用 docker-compose.yml 版本“3.4”。

*:Dockerfile是这样的:

...
RUN cp environment-prod-docker.js environment.js
RUN cat environment.js
RUN npm ci --only=production
...
Run Code Online (Sandbox Code Playgroud)

Luk*_*ham 26

不幸的是,马克斯的回答对我不起作用。然而这个命令做了:

docker system prune --all --force
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!这绝对是矫枉过正(因为它删除了所有 Docker 容器的所有缓存),但找不到一种替代方案来强制不使用正​​在构建的给定服务的缓存。 (4认同)

Mar*_*ark 20

据我所知,您无法阻止docker-compose up使用构建缓存。我发现有效执行此操作的唯一方法是运行:

docker image rm <image>
docker builder prune
Run Code Online (Sandbox Code Playgroud)

第一个命令删除您正在重建的映像。第二个命令修剪悬挂层,因此您的下一个构建将是新鲜的。

  • 这对我不起作用。尽管此命令记录了“总回收空间:17.59GB”,这很好,但后续的“docker-compose up”仍然会导致使用更改,例如“CACHED [13/15] RUN ./script.sh” (4认同)

Vic*_*Vic 8

更新:2023 年 10 月

docker compose build 接受选项--no-cache。尽管进度中显示[已缓存],但实际上并没有使用缓存。

这是描述页面https://docs.docker.com/engine/reference/commandline/compose_build/

无法评论,只好放在这里。尝试docker compose更新docker-compose您的 docker 引擎。