在网上进行初始解决方案搜索后,这是原始命令。我徒然尝试了使用斜杠(/)的各种组合:
winpty docker run --privileged --rm -it -v '//c//temp//git//distributions//cache://root//.gradle' --mount type=bind,source=//c//temp//git//distributions,target=//distdestiny_server.in.systems.com/x86/p83-buildenv './gradlew'
C:/Program Files/Docker Toolbox/docker.exe: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"./gradlew\": stat ./gradlew: no such file or directory": unknown.
在网上进一步搜索后,我使用了具有各种组合的绑定安装和传播选项,但最终出现此错误:
winpty docker run --privileged --rm -it --mount type=bind,source=//c//temp//git//distributions//cache,target=//root//.gradle --mount type=bind,source=//c//temp//git//distributions,target=/dist,bind-propagation=shared destiny_server.in.systems.com/x86/p83-buildenv './gradlew'
C:/Program Files/Docker Toolbox/docker.exe: Error response from daemon: linux mounts: path /c/temp/git/distributions is mounted on / but it is not a shared mount.
我遇到的另一个选择是MountFlags。但是,码头工人文档仅提及它,但没有说明在何处指定。我找不到在cmd上指定它的方法。线。我在网上找到了对某些文件的引用,例如Dockerfile,docer.service等。但是,我在系统上找不到任何这些文件。我是否应该创建群以获取这些文件?我唯一的最后一个选择是使用MountFlags,但不知道如何以及在哪里指定它。
Docker详细信息:在我键入此内容时,我刚刚将台式机上的Docker Client从17.07.0-ce升级到了18.03.0-ce。我仍然有相同的问题报告。
从Docker快速入门终端:
$ docker version Client: Version: 18.03.0-ce API version: 1.37 Go version: go1.9.4 Git commit: 0520e24302 Built: Fri Mar 23 08:31:36 2018 OS/Arch: windows/amd64 Experimental: false Orchestrator: swarm Server: Docker Engine - Community Engine: Version: 18.09.3 API version: 1.39 (minimum version 1.12) Go version: go1.10.8 Git commit: 774a1f4 Built: Thu Feb 28 06:40:51 2019 OS/Arch: linux/amd64 Experimental: false
在这方面的任何帮助都是很有帮助的。谢谢。
答案 0 :(得分:0)
在Windows上使用docker充满了与路径有关的问题。看来您跌倒了其中一个兔子洞。假设.gradle是一个目录(它在我的机器上):
我解决此问题的方法是使用docker卷:卷与您当前正在使用的驱动器映射不同,因为文件不会出现在主机文件系统上,但是它们在容器执行期间是持久的,通常就足够了。例如,我所有开发工具中的一个卷都挂载了一个/git
目录,该目录使用该目录来获取从git克隆的源代码。如果您需要在docker外部访问这些文件,那么卷可能会很尴尬,但是如果您仅在容器内使用gradle而从未在主机上使用过gradle,则可以将.gradle目录映射到一个卷,并在不同容器之间重复使用
但是,在执行此操作之前,最好使用以下命令显式创建卷:
docker volume create gradle
有各种各样的技术可以隐式地创建体积,但是就我个人而言,由于最不令人惊讶的原理,我想明确一些。
安装该卷的语法与您上面使用的语法相似,但是我们只是在音量开关的左侧命名该卷:
docker container run -it --rm -v gradle:/root/.gradle/ ...
不过,您的docker run命令中可能还有另一个问题。最后,您传递字符串'./gradlew'
。您假设它在工作目录中,如果工作目录不是您认为的那样,则可能会出现问题。为了确保不会发生这种情况,您应该使用-w <dir>
开关声明工作目录。像这样:
docker container run -it --rm -w /root /v gradle:/root/.gradle/