gpt4 book ai didi

docker - 如何在两个 docker 容器之间共享一个文件夹内容并允许其中一个删除和写入共享文件夹?

转载 作者:行者123 更新时间:2023-12-02 19:51:58 24 4
gpt4 key购买 nike

我正在使用 docker 为 ionic/Angluar 项目创建开发环境。 Nodejs 是用于观看和构建的图像 www来自主机上 src 代码的文件(本地 src 代码)(带有 ng build --watch --poll=2000 )和 NGINX 图像应该得到那些生成的 www文件夹。

我为这个用例尝试了两种方法,但都失败了:

  • 方法 1:我已将文件夹绑定(bind)到两个容器:这里的问题是 NGINX 容器无法从 www 同步/获取文件在主机上。虽然,NodeJS 容器设法生成文件并与主机目录同步 www .原因是:当 NODEJS 删除并重新生成 www 时,NGINX 会丢失绑定(bind)挂载。目录。
  • 方法 2:我使用了数据卷:但 NodeJS 容器在启动时失败,因为它无法删除此 www文件以便使用新的 www 重新生成子文件(因为它被 NGINX 锁定)。
    错误信息:
  • frontend        | EBUSY: resource busy or locked, rmdir '/home/frontend/www'
    frontend | Error: EBUSY: resource busy or locked, rmdir '/home/frontend/www'
    frontend | at Object.rmdirSync (fs.js:752:3)
    ...

    Compose 文件如下所示:(我在 compose-file 中标记了上述方法,但当然我一次只使用一次)
    version: "3.7"

    services:
    web-server:
    image: webserver-nginx:latest
    container_name: webserver
    build:
    context: ../nginx/
    dockerfile: Dockerfile-nginx
    ports:
    - "80:80"
    volumes:
    - /my_host_machine/www:/usr/share/nginx/html:ro # approach number 1
    - www:/usr/share/nginx/html/afv:ro # approach number 2
    depends_on:
    - frontend

    frontend:
    image: frontend-angular:latest
    container_name: frontend
    build:
    context: /foo/
    dockerfile: Dockerfile-nodejs-frontend
    volumes:
    - /my_host_machine/www:/home/frontend/www # approach number 1
    - www:/home/frontend/www # approach number 2

    volumes:
    www:

    任何人都可以帮助我或有建议或解决方法吗?

    最佳答案

    我认为您的第一个选择几乎是可行的。尝试使用该绑定(bind)挂载目录并在其中为 www 创建子目录另一个用于源代码。从源目录构建一个容器并将结果移动到 www它被另一个容器拾取的目录(不删除整个目录)。

    关于docker - 如何在两个 docker 容器之间共享一个文件夹内容并允许其中一个删除和写入共享文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60039915/

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