当前位置: 首页 > 面试题库 >

在Windows 10上的Docker中将当前目录作为卷挂载

羊煜
2023-03-14
问题内容

描述

我正在通过Hyper-V在Windows 10上使用Docker
1.12.5版本,并想在当前路径中将容器可执行文件用作命令。我构建了运行良好的Docker映像,但是挂载当前路径时遇到了问题。这个想法是创建一个别名并执行一个docker run --rm [...]命令,以便可以在当前目录的系统范围内使用它。

设定

我有一个带文件夹“ test”的驱动器E,在其中有一个名为“
Windows主机上的文件夹”的文件夹,以显示该命令正在运行。Dockerfile创建目录/data,将其定义为VOLUME和WORKDIR。

E:\test在PowerShell中的当前目录和绝对路径执行多克尔命令,我可以看到的内容E:\test

PS E:\test> docker run --rm -it -v E:\test:/data mirkohaaser/docker-clitools ls -la
total 0
drwxr-xr-x 2 root root 0 Jan  4 11:45 .
drwxr-xr-x 2 root root 0 Jan  5 12:17 folder on windows host

问题

我想使用当前目录而不是绝对符号。由于不同的错误消息,我无法在卷中使用pwd:

尝试使用($ pwd)

PS E:\test> docker run --rm -it -v ($pwd):/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error parsing reference: ":/data" is not a valid repository/tag.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.

尝试使用/($ pwd)

PS E:\test> docker run --rm -it -v /($pwd):/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error parsing reference: "E:\\test" is not a valid repository/tag.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.

尝试\´pwd \´

PS E:\test> docker run --rm -it -v ´$pwd´:/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: Invalid bind mount spec "´E:\\test´:/data": invalid mode: /data.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.

尝试使用pwd

PS E:\test> docker run --rm -it -v `$pwd`:/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: create $pwd: "$pwd" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.

在Windows 10上的Docker中将当前目录作为卷挂载的正确语法是什么?


问题答案:

在Windows命令行(cmd)中,您可以像这样挂载当前目录:

docker run --rm -it -v %cd%:/usr/src/project gcc:4.9

在PowerShell中,您可以使用${PWD},它为您提供当前目录:

docker run --rm -it -v ${PWD}:/usr/src/project gcc:4.9

在Linux上:

docker run --rm -it -v $(pwd):/usr/src/project gcc:4.9

跨平台

以下选项在PowerShell和Linux(至少是Ubuntu)上均可使用:

docker run --rm -it -v ${PWD}:/usr/src/project gcc:4.9
docker run --rm -it -v $(pwd):/usr/src/project gcc:4.9


 类似资料:
  • 尝试使用($pwd) 尝试使用/($pwd) 尝试使用\"pwd\“

  • 问题内容: Docker文档指出,可以将单个文件装载到Docker容器中: -v标志还可用于从主机挂载单个文件-而不是目录。 这会将您放入新容器中的bash外壳中,您将从主机获得bash历史记录,退出容器时,主机将具有在容器中键入命令的历史记录。 但是,当我尝试将文件挂载为目录时: 我的Dockerfile看起来像这样: Docker版本为1.9.1,内部版本为a34a1d5。 这是文档问题,还是

  • 我正在尝试将当前的工作目录挂载到Docker容器上,但没有工作。这是我的Dockerfile 我想,它们应该只安装在容器上,并且只有输出将在当前工作目录中生成。抱歉,我对Docker很陌生,我需要一些帮助....

  • 问题内容: 我有一个正在进行dockerizing的开发环境,并且我希望能够实时重新加载所做的更改而不必重建docker映像。我使用docker compose是因为redis是我应用程序的依赖项之一,我喜欢能够链接redis容器 我在我的中定义了两个容器: 我已经到了我应用程序的dockerfile中添加卷的地步,但是如何将主机的目录挂载到卷中,以便对代码的所有实时编辑都可以反映在容器中? 这是

  • 问题内容: 我正在使用Docker,并且我想挂载一个变化很大的动态文件夹(因此我不必为每次执行都制作一个Docker映像,这会太昂贵),但是我希望该文件夹是只读的。将文件夹所有者更改为其他人可行。但是,需要访问权限,而我不希望将其公开给应用程序。 当我使用flag进行挂载时,它将提供我提供的任何用户名,我在docker映像内创建了一个非root用户,但是,该卷中的所有文件都以运行docker的用户

  • 问题内容: 在Mac上,如何将卷装载到Docker容器? 在我的Linux机器上,这很容易。我需要做的只是运行容器时的操作。但是Mac是不同的,因为我必须运行boot2docker才能在VirtualBox中运行VM。我试过跑步 但我明白了 如果我忽略了它,仍然尝试像这样挂载在虚拟机上 我懂了 我感觉好像缺少了一些非常简单的东西,但是我无法弄清楚。任何帮助将不胜感激。 问题答案: 好的,在研究了G