首页 > 解决方案 > 如何使用 Compose 将服务器目录挂载到 Docker 容器?

问题描述

我正在尝试将我组织服务器 ( Y:/some/path) 中的目录挂载到 docker 容器。我的docker-compose.yml样子是这样的:

services:

  dagit:
    volumes:
      - type: bind
        source: Y:/some/path
        target: /data
    build:
      context: .
      dockerfile: Dagit.Dockerfile
    ports:
      - "3000:3000"
    container_name: dagit-container

  dagster:
    volumes:
      - type: bind
        source: Y:/some/path
        target: /data
    build:
      context: .
      dockerfile: Daemon.Dockerfile
    container_name: dagster-container
    tty: true
    env_file: .env

我已Y:/some/path与 Docker 共享。在 上docker compose up -d --build,我收到以下错误:Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /host_mnt/uC/my_ip/some/path。如何正确挂载这样的目录?另外,在顶级volumes键中声明这个挂载并在两个服务中引用它的正确方法是什么,所以我不必复制代码?

标签: dockerdocker-compose

解决方案


获取以下 docker-compose.yml 文件:

version: '3.9'

services:
  DockerA:
    image: ubuntu:latest
    container_name: DockerA
    command: ["sleep", "300d"]
    volumes:
      - "./data:/root/data"

  DockerB:
    image: ubuntu:latest
    container_name: DockerB
    command: [ "sleep", "300d" ]
    volumes:
      - "./data:/root/data"

volumes:
  data:

在该文件(同一目录)旁边创建一个名为“数据”的目录。

现在启动码头工人:

docker-compose up -d

如果你进入 DockerA 容器并在数据目录中创建一些东西:

docker exec -it DockerA /bin/bash
# cd /root/data
# echo "Hello World!" > x.txt

然后进入 DockerB

docker exec -it DockerB /bin/bash
# cd /root/data
# cat x.txt

您将看到 x.txt 的相同内容。

现在回到主机并检查 ./data 目录中的 x.txt 文件。也是一样的内容。

如果您在 Host 上编辑 x.txt,它将立即反映在 DockerA 和 DockerB 中。


推荐阅读