Docker Volume 的 1 路同步而不是 2 路同步?

Jac*_*Goh 5 node.js docker docker-compose

我正在使用 Docker Compose 作为全栈 Javascript 项目的本地开发环境。

我的 Docker Compose 文件的一部分如下所示

version: "3.5"
services:
  frontend:
    build:
      context: ./frontend/
      dockerfile: dev.Dockerfile
    env_file:
      - .env
    ports:
      - "${FRONTEND_PORT_NUMBER}:${FRONTEND_PORT_NUMBER}"
    container_name: frontend
    volumes:
      - ./frontend:/code
      - frontend_deps:/code/node_modules
      - ../my-shared-module:/code/node_modules/my-shared-module
Run Code Online (Sandbox Code Playgroud)

我正在尝试开发一个名为 的自定义 Node 模块my-shared-module,这就是我添加- ../my-shared-module:/code/node_modules/my-shared-module到 Docker Compose 文件中的原因。节点模块托管在私有 Git 存储库中,并在以下位置定义:package.json

  "dependencies": {
    "my-shared-module": "http://gitlab+deploy-token....@gitlab.com/.....git",
Run Code Online (Sandbox Code Playgroud)

我的问题是,

当我使用 docker 容器中运行更新我的节点模块时npm install,它会my-shared-module从我的私有 Git 存储库下载到/code/node_modules/my-shared-module,并覆盖主机中的文件../my-shared-module,因为它们是同步的。

所以我的问题是,Docker 中是否可以进行单向卷同步?

  • 当主机更改时,更新容器
  • 当容器更改时,不更新主机吗?

小智 6

不幸的是,我认为这在 Docker 中是不可能的。挂载主机卷始终是双向的,除非您认为只读挂载是单向的,但这会阻止您使用npm install.

这里最好的选择是每次使用新文件重建映像,或者将CMD已安装的文件复制到已安装卷之外的新文件夹中。这样,任何文件更改都不会保留回主机。