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

问题描述 投票:3回答:1

设置

我在Windows 8.1上运行了2个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才会构建角度项目,并且出现“冲突”错误:

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

这个问题有解决方法吗?

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.