在docker-compose.yml中使用Linux容器在Windows主机上挂载Docker卷

4

我刚开始使用 Docker 和 Docker Compose 特性来设置我的 Web 应用服务。我在 Windows 主机上运行 Docker,使用 Linux 容器。我有一个叫做 db_volume 的命名卷,它用于我的 PostgreSQL 服务。

services:
  postgres_image:
    image: postgres:latest
    ports:
      - "5432"
    restart: always
    volumes:
      - db_volume:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: "user"
      POSTGRES_PASSWORD: "password"
      POSTGRES_DB: "db1"
volumes:
  db_volume:

当我使用docker volume inspect命令查看此命名卷时,可以看到Mountpoint路径是Linux路径。
"Mountpoint": "/var/lib/docker/volumes/dockercompose18019271739475279775_db_volume/_data"

我在想是否有办法将此路径转换为Windows路径,以便我可以将这些数据导入我的pgadmin数据库。

我已经在我的.env文件中设置了COMPOSE_CONVERT_WINDOWS_PATHS=1,但似乎没有起作用。

我在Docker设置中也分享了我的C和D驱动器。


另一个选项是使用 docker cp 直接将文件复制到卷中。您可以从主机路径复制到容器路径或从容器到容器。要为容器命名以便于使用,请在 docker-compose.yml 中添加选项 container_name: my_postgres。以下是使用单个命令进行复制的示例:(首先将文件放入所选的 Windows 文件夹中,假设为 d:/pgdata),然后只需运行 docker cp d:/pgdata/ my_posgres:/var/lib/postgresql/data。这样,您就可以与 Win/Lin 主机分离。 - Dimitar Nikovski
2个回答

1

无法将其转换为 Windows 路径,因为在此情况下它不在 Windows 文件系统上。您分配的存储位于 MobyLinux VM 上,该虚拟机是作为 Windows 安装的一部分创建的。如果您希望存储显示为本地 Windows 文件系统的一部分,则需要执行以下操作,将数据目录映射到主机文件系统:

version: '3'

services:
  postgres:
    container_name: pg
    image: postgres:latest
    ports:
      - "5432"
    restart: always
    volumes:
      - d:/pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: "user"
      POSTGRES_PASSWORD: "password"
      POSTGRES_DB: "db1"

请注意,在Windows上,您需要通过Docker设置中的“共享驱动器”设置公开您的驱动器。

当我将volumes路径更改为d:/pgdata目录时,会出现System.Net.Sockets.SocketException: 'No route to host'错误。 - SLAF
你的Windows机器上实际上有一个名为d:\pgdata的本地目录吗? - Steve Boyd
是的,我创建了一个。 - SLAF

0
你需要类似这样的代码:
volumes: 
      - //d/pgdata/:/var/lib/postgresql/data

针对Windows文件系统和从C#发出请求,您将请求“/var/lib/postgresql/data”路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接