【问题标题】:Set volume to docker container from wsl from windows 10从 Windows 10 的 wsl 将卷设置为 docker 容器
【发布时间】:2019-08-31 10:28:33
【问题描述】:

在我的 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 中?

【问题讨论】:

    标签: docker windows-subsystem-for-linux


    【解决方案1】:

    您必须将安装路径从 /mnt 移动到 /。在这个答案中有以下解释:Can you run Docker natively on the new Windows 10 (Ubuntu) bash userspace?

    音量

    添加卷时要小心。路径 C:\dir 在 WSL 上将显示为 /mnt/c/dir,在 docker 引擎上将显示为 /c/dir/。你可以永久克服它:

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

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

    问候

    【讨论】:

    • 我按照你的建议运行代码后,我从 powershell 运行 Restart-Service LxssManager。现在所有 Windows 驱动器都在 root wsl@wsl: / $ ls @carlosRafaelRamirez bin c dev f home lib media opt root sbin srv tmp var boot d etc g init lib64 mnt proc run snap sys usr wsl@wsl: / @CarlosRafaelRamirez
    • 我创建了 postgresql 容器,我收到了错误 paste.ubuntu.com/p/nhjm3KWNGf @CarlosRafaelRamirez
    • 你就在附近,可能它现在正在从 Windows 获取正确的目录。我不知道如何解决权限问题。如果更改 windows 中的权限会有所不同,或者如果这是 postgress 忽略权限的一种方式
    • 也许你是对的,我会尝试忽略权限。谢谢@CarlosRafaelRamirez
    猜你喜欢
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 2019-08-17
    • 1970-01-01
    • 2019-06-21
    • 2021-05-19
    • 2021-07-16
    相关资源
    最近更新 更多