在PowerShell中使用远程路径Dockerfile构建Docker镜像是否可行?
嘿,咱们来拆解下你这条命令——它大概率无法正常执行,问题主要出在这两个关键地方:
远程路径格式错了:在PowerShell(以及整个Windows系统)里,访问远程共享路径得用双反斜杠
\\,而不是你写的双正斜杠//。比如正确的远程Dockerfile路径应该是\\RemoteServerpath\FolderStructure\Dockerfile(如果你的Dockerfile文件名就是默认的Dockerfile,其实可以不用-f参数,但要是文件名不一样就得指定)。构建上下文不匹配:命令末尾的
.代表用本地当前目录作为构建上下文,但你的Dockerfile在远程服务器上。Docker构建时会把上下文目录里的所有文件打包发给Docker daemon,如果上下文是本地,那Dockerfile里要是引用了远程服务器上的其他文件,这些文件不在本地上下文里,构建肯定失败;而且就算你指定了远程的Dockerfile,Docker daemon默认只认本地文件系统,直接用远程共享路径可能会有权限或者路径识别的坑。
给你几个靠谱的解决办法
方法1:先把远程文件拉到本地构建
最稳妥的方式是先把远程服务器上的Dockerfile和相关构建文件复制到本地目录,再执行构建:
# 把远程共享里的所有文件复制到本地的build目录 Copy-Item -Path "\\RemoteServerpath\FolderStructure\*" -Destination ".\local-build-dir\" -Recurse # 进入本地构建目录 cd .\local-build-dir\ # 执行构建(此时Dockerfile在本地,上下文也是本地) docker build -t MyFirstDockerImage .
方法2:连接到远程Docker daemon直接构建
如果远程服务器上已经装了Docker并允许远程连接,你可以直接让本地的Docker客户端连接到远程的daemon,这样就能直接用远程服务器上的文件作为上下文:
# 设置环境变量,指向远程Docker daemon的地址(端口要和远程配置一致,默认2375是未加密端口) $Env:DOCKER_HOST = "tcp://RemoteServerpath:2375" # 直接用远程服务器内部的路径执行构建(这里的路径是远程服务器本地的文件路径,不是共享路径) docker build -t MyFirstDockerImage /FolderStructure/
方法3:直接用远程共享作为上下文(谨慎使用)
如果你一定要直接用远程共享路径,得先确保当前用户有访问远程共享的权限,然后修正路径格式,同时把上下文指定为远程共享目录:
docker build -t MyFirstDockerImage -f "\\RemoteServerpath\FolderStructure\Dockerfile" "\\RemoteServerpath\FolderStructure\"
不过这种方式可能会遇到权限限制或者Docker对网络共享路径的支持问题,稳定性不如前两种方法,不优先推荐。
内容的提问来源于stack exchange,提问作者Amrita06

