如果nginx正在运行(dockerized),则无法建立角度dist

时间:2019-02-11 21:47:25

标签: angular docker nginx docker-compose

设置

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

一个包含 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

是否有解决此问题的方法?

1 个答案:

答案 0 :(得分:2)

我认为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个容器读取文件时,文件被锁定为“只读模式”。

解决方案是仅为输出目录创建一个命名卷,以便不与主机路径绑定。这两个容器将读写文件而没有问题。

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