首页 > 解决方案 > 从 Windows 10 的 wsl 将卷设置为 docker 容器

问题描述

在我的 Windows 中,我安装了 docker 和 ubuntu 18.4 wsl。所以在 localhost 上公开守护程序后,我可以在 ubuntu wsl 上使用 Windows 守护程序。

我在驱动器 d 上创建了一个目录,并在数据目录中创建了一个文件,如下所示:

PS D:\wsl\data> dir
    Directory: D:\wsl\data
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        8/31/2019   2:27 PM              0 New Text Document.txt
PS D:\wsl\data>

之后,我在 wsl 终端上运行如下所示的 postgres 容器:

$ docker run  --name=pg-docker3  -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=s123  -v /mnt/d/wsl/data:/var/lib/postgresql/data mdillon/postgis:11-alpine

创建容器后,我通过 bash 打开容器:

$ docker exec -it pg-docker3 bash

这是数据 postgres 目录:

bash-4.4# ls /var/lib/postgresql/data
PG_VERSION            pg_commit_ts          pg_logical            pg_serial             pg_subtrans           pg_xact               postmaster.pid
base                  pg_dynshmem           pg_multixact          pg_snapshots          pg_tblspc             postgresql.auto.conf
data                  pg_hba.conf           pg_notify             pg_stat               pg_twophase           postgresql.conf
global                pg_ident.conf         pg_replslot           pg_stat_tmp           pg_wal                postmaster.opts
bash-4.4# 

如您所见data,目录结构位于位置,但是当我在数据目录中列出内容时,我可以看到在主机中创建的文本文件!!!

我在数据目录中创建了一个目录,称为kk.

bash-4.4# ls /var/lib/postgresql/data
PG_VERSION            pg_commit_ts          pg_logical            pg_serial             pg_subtrans           pg_xact               postmaster.pid
base                  pg_dynshmem           pg_multixact          pg_snapshots          pg_tblspc             postgresql.auto.conf
data                  pg_hba.conf           pg_notify             pg_stat               pg_twophase           postgresql.conf
global                pg_ident.conf         pg_replslot           pg_stat_tmp           pg_wal                postmaster.opts
bash-4.4# ls /var/lib/postgresql/data/data/
kk
bash-4.4#

但不要在主机内创建此目录,如您所见:

PS D:\wsl\data> dir

    Directory: D:\wsl\data

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        8/31/2019   2:27 PM              0 New Text Document.txt

在哪里/var/lib/postgresql/data/data/?为什么它没有出现在 /mnt/d/wsl/data 中?

标签: dockerwindows-subsystem-for-linux

解决方案


您必须将安装路径从 /mnt 移动到 /。在这个答案中有以下解释:你能在新的 Windows 10 (Ubuntu) bash 用户空间上本地运行 Docker 吗?

添加卷时要小心。该路径C:\dir/mnt/c/dir在 WSL 和/c/dir/docker 引擎上可见。您可以永久克服它:

sudo bash -c "echo -e '[automount] \nroot = /'>/etc/wsl.conf"

对 wsl.conf 进行更改后,您必须退出并重新加载 WSL,以便 WSL 在启动时读取您的更改。

问候


推荐阅读