gpt4 book ai didi

angular - 如果 nginx 正在运行(dockerized),则无法构建 Angular dist

转载 作者:太空狗 更新时间:2023-10-29 18:28:05 25 4
gpt4 key购买 nike

设置

我有 2 个运行在 Windows 8.1 上的 docker 容器

一个包含用于构建 Angular 项目的 npm。另一个包含 nginx,服务于 dist 目录。

dist 目录位于 /var/www/front 中,由卷中的两个容器共享。

这是 docker-compose 配置:

nginx:
build: ./docker/nginx
ports:
- "80:80"
- "8080:8080"
environment:
APP_ENV: prod
volumes:
- ./logs/nginx:/var/log/nginx:cached
- ./back:/var/www/back
- ./front:/var/www/front
node:
build: ./docker/node
ports:
- "4200:4200"
volumes:
- ./front:/var/www/front
- /var/www/front/node_modules/

问题

当 nginx 容器正在运行并且只有当页面显示在浏览器上时,ng build 不会构建 Angular 项目,失败并出现“冲突”错误:

ETXTBSY: text file is busy, unlink '/var/www/front/dist/assets/image.jpg

这个问题有解决办法吗?

最佳答案

我认为 Windows 文件系统锁定了第二个容器使用的文件,这可能会导致您的错误。使用named volumes在两个容器之间共享数据可以解决这个问题。

nginx:
build: ./docker/nginx
ports:
- "80:80"
- "8080:8080"
environment:
APP_ENV: prod
volumes:
- ./logs/nginx:/var/log/nginx:cached
- ./back:/var/www/back
- ./front:/var/www/front
- dist:/var/www/front/dist
node:
build: ./docker/node
ports:
- "4200:4200"
volumes:
- ./front:/var/www/front
- dist:/var/www/front/dist
- /var/www/front/node_modules/

volumes:
dist:

更新:

这里的问题是 front/dist 输出目录,它在两个容器之间共享,但也与运行 Windows 的主机共享。由于某些原因,当 2 个容器读取文件时,文件被锁定在“只读模式”。

解决方案是为输出目录创建一个命名卷,这样就不会与主机路径绑定(bind)。这 2 个容器将毫无问题地读写文件。

唯一的缺点是输出文件将更难被主机访问。例如,用于版本控制目的。

关于angular - 如果 nginx 正在运行(dockerized),则无法构建 Angular dist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54639663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com