docker - 从 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 中?
解决方案
您必须将安装路径从 /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 在启动时读取您的更改。
问候
推荐阅读
- python - django模板渲染慢
- c# - 我可以在 ASP.NET Core 项目上使用带有 web.config 的 URL 重写吗?
- javascript - 计算低潮和高潮之间时间的算法
- javascript - 按照文档,我无法创建 Vue.js 3 的实例
- asp.net-mvc - 什么时候不会查看返回 id 到控制器?
- sql - 带有时间戳表达式的已保存视图
- javascript - 通过 Javascript 中的 for 循环创建多维数组
- python - 如何将具有相同名称的文件夹递归复制到 Google Colab 中的另一个文件夹
- javascript - 如何仅为 Android 用户显示 Shopify 商店
- ios - webview_flutter 主线程检查器:在后台线程上调用的 UI API: