繁体   English   中英

当安装在 docker 和 windows 子系统用于 linux 时,“~”会扩展到哪里?

[英]Where does '~' expand to when mounted in docker with windows subsystem for linux?

我有一个我编写的 docker 容器,它为我设置了 AWS 配置文件。 在 Linux 中它工作得很好,在 WSL 上它部分工作。

当我运行容器时,我正在挂载~/.aws目录,检查配置文件是否存在,如果它们不存在,我会创建它们。 如果它们确实存在,我什么也不做。

在 Linux 中,我可以运行此容器,然后继续使用 aws-cli 没有问题。
在 Linux 的 Windows 子系统中 - 当我第一次运行容器时,它会为我创建配置文件。 如果我选择再次运行容器,它会看到配置文件已经存在,所以它什么也不做。 这告诉我该文件存在于某处,但我不能使用 aws-cli 因为该文件不存在于~/.aws

所以我的问题是当安装到 docker 容器时,WSL 中的~/.aws在哪里? 我试图在 WSL 中的整个文件系统上进行查找,但没有返回任何内容。 我也尝试将挂载路径更改为/root/.aws并且遇到了相同的情况。

编辑:

我仍然不知道我上面的问题的答案。 但是,如果有人遇到这个问题,我确实找到了解决方法。

我已经更新了 Docker 桌面以允许安装整个c:/驱动器。 然后我只是将我的 docker 运行命令更改为挂载c:/.aws而不是~/.aws ,所以我的命令看起来像-v c:/.aws:/root/.aws 之后,我在 WSL export AWS_SHARED_CREDENTIALS_FILE="/mnt/c/.aws/credentials"中添加了这个环境变量,现在 aws cli 可以了解我的配置文件更改。

shell 总是扩展~HOME环境变量的值。 如果未设置该环境变量,则它将扩展为空。 如果您想查找~/.aws的位置,则可以编写类似echo ~/.aws的内容,shell 将为您扩展它。

唯一的例外是~user扩展到用户user的主目录; 那里没有咨询HOME环境变量。

You have to remember that in your setup the docker engine (docker for windows) is installed on windows, it is inside the windows environment that the docker command is 'launched'. 因此,当您说使用 ~/.aws 时,它会在 windows 文件系统中查找此位置。

在 windows ~ 是一个有效的目录名称(尝试 mkdir ~ 从 cmd 提示符)所以当你说 map ~/.aws 我不确定实际创建了什么。 也许尝试在您的 c 驱动器中搜索名为 ~ 的文件夹。 windows 中没有 ~ 快捷方式用于主文件夹,如果有的话会是哪个主目录? 登录 windows 用户的主页? 还是 WSL 里面的家?

要在 WSL 中进行这项工作,您需要将 ~/.aws 传递给 wslpath,如下所示:

➜  echo $(wslpath ~/.aws)
/mnt/c/home/damo/.aws

但是这个位置是根据 WSL 而不是 windows 的路径,您需要使用 -w 标志第二次执行两次

➜  echo $(wslpath -w $(wslpath ~/.aws))
C:\home\damo\.aws

这将使您的最终 docker 命令如下所示:

docker run -it -v  $(wslpath -w $(wslpath ~/.aws)):/root/.aws awsprofileprocessor:latest

有了这个,您现在将告诉 docker 为 windows windows 路径放置安装

如果这对你有用,请告诉我,我对结果很感兴趣。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM