当使用 linux 的 windows 子系统安装在 docker 中时,'~' 扩展到哪里?
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 中对整个文件系统进行查找,但 returns 什么也没有。我也试过将安装路径更改为 /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
环境变量。
您必须记住,在您的设置中,docker 引擎(docker for windows)安装在 windows 上,它位于 windows docker 命令是 'launched' 的环境。因此,当您说使用 ~/.aws 时,它会在 windows 文件系统中查找此位置。
在 windows 中 ~ 是一个有效的目录名称(在 cmd 提示符下尝试 mkdir ~)所以当你说 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 安装
的路径
如果这对你有用,请告诉我,我很想知道结果如何。
我有一个我编写的 docker 容器,用于为我设置 AWS 配置文件。在 Linux 中它很好用,在 WSL 上它部分起作用。
当我 运行 容器时,我正在安装 ~/.aws
目录,检查配置文件是否存在,如果不存在,我将创建它们。如果它们确实存在,我什么都不做。
在 Linux 我可以 运行 这个容器,然后继续使用 aws-cli 没有问题。
在 Linux 的 Windows 子系统中 - 当我第一次 运行 容器时,它会为我创建配置文件。如果我再次选择 运行 容器,它会发现配置文件已经存在,所以它什么都不做。这告诉我文件存在 某处 但我不能使用 aws-cli 因为文件不存在于 ~/.aws
.
所以我的问题是,当安装到 docker 容器时,WSL 中的 ~/.aws
在哪里?我试图在 WSL 中对整个文件系统进行查找,但 returns 什么也没有。我也试过将安装路径更改为 /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
环境变量。
您必须记住,在您的设置中,docker 引擎(docker for windows)安装在 windows 上,它位于 windows docker 命令是 'launched' 的环境。因此,当您说使用 ~/.aws 时,它会在 windows 文件系统中查找此位置。
在 windows 中 ~ 是一个有效的目录名称(在 cmd 提示符下尝试 mkdir ~)所以当你说 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 安装
的路径如果这对你有用,请告诉我,我很想知道结果如何。