【问题标题】:Can't build angular dist, if nginx is running (dockerized)如果 nginx 正在运行(dockerized),则无法构建 angular dist
【发布时间】:2019-07-05 11:38:09
【问题描述】:

设置

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

一个包含 npm 用于构建 Angular 项目。 另一个包含 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

这个问题有解决办法吗?

【问题讨论】:

    标签: angular docker nginx docker-compose


    【解决方案1】:

    我认为 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 输出目录在 2 个容器之间共享,但也与运行 Windows 的主机共享。由于某些原因,当 2 个容器读取文件时,这些文件被锁定为“只读模式”。

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

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

    【讨论】:

    • 也许可以,但我需要挂载主机路径 ./front 以更新代码。如何使用命名卷来完成?
    • 我为您的卷添加了一个示例配置。有关更多信息,请查看我在帖子中链接的文档齐全的 docker-compose 参考。
    • 我之前确实尝试过配置驱动程序,但我遇到了路径错误。多亏了你,我做对了……但不幸的是,它没有解决忙文件错误。我想是 Windows 故障。
    • 您可以尝试在 nginx 容器中挂载只读卷。也许这有帮助。
    • 我添加了 read_only: true,有和没有 consistency: cached。同样的错误。释放锁定文件的唯一解决方案是重新启动 nginx 容器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2023-03-15
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    相关资源
    最近更新 更多