繁体   English   中英

无法使用 Go Docker 引擎 ZDB974238714CA81DE634A7C2Z 的容器在 Docker 中安装文件夹

[英]Unable to mount a folder in Docker from container with Go Docker Engine API

我正在尝试使用 Go Docker 引擎 ZDB974238714CA8DE634A7CE1D08 在容器内运行 docker。 我能够将一个文件夹从主机系统安装到容器,但只有空目录被复制到容器内的 docker 中。 如果有任何替代方法,请帮助我。 我正在使用以下命令启动我的容器。

docker 运行 --rm -v C:\Users\user\source\repos\game:/app/myrepo -v /var/run/docker.sock:/var/run/docker.sock testimage

附上一段代码。 Go Docker SDK 代码启动容器

resp, err := cli.ContainerCreate(ctx, &container.Config{
    Image: "hello-image",
    Cmd:   []string{"ls"}, #the actual cmd would look different
    Tty:   true,
}, &container.HostConfig{
    Binds: []string{
        "/app/myrepo:/myrepo",
    },
}, nil, nil, containername)
if err != nil {
    panic(err)
}

更新了与绝对路径绑定的代码

resp, err := cli.ContainerCreate(ctx, &container.Config{
    Image: "hello-image",
    Cmd:   []string{"ls"}, #the actual cmd would look different
    Tty:   true,
}, &container.HostConfig{
    Mounts: []mount.Mount{
        {
            Type:   mount.TypeBind,
            Source: "/app/myrepo",
            Target: "/myrepo",
        },
    },
}, nil, nil, containername)
if err != nil {
    panic(err)
}

正如评论中所讨论的,OP 正在容器中运行应用程序。 该应用程序正在连接到主机上的 docker 守护程序(通过共享/var/run/docker.sock )并尝试创建容器。 问题是请求包含一个挂载点,源是/app/myrepo ,它是一个在容器内有效但在主机上无效的源路径。

为了帮助理解为什么这是一个问题,您需要考虑如何提出 API 请求。 您的代码将生成一个 JSON 格式的请求; 这将包括以下内容:

...
"HostConfig": {
   ...
   "Mounts": [
       {
           "Source": "/app/myrepo",
           "Destination": "/myrepo",        
       }
   ]
}

重要的是要注意Source路径作为字符串传递,Docker 守护程序将在主机(例如 windows 框)上下文中解释这一点。 当它试图定位请求的路径 ( /app/myrepo ) 时,它不会找到它,因为该路径在主机上不存在。 要更正此问题,您需要发送有效路径,例如

Mounts: []mount.Mount{
   {
      Type:   mount.TypeBind,
      Source: "c:/Users/user/source/repos/game",
      Target: "/myrepo",
    },
}

一个注意事项; 以这种方式访问 Docker API (绑定挂载/var/run/docker.sock: )很方便,但如果有人获得对容器的访问权限,那么他们也可以获得对所有容器的完全控制权(因为他们可以访问 ZC5FD214CDD22E3B4B27 API)。 您可能需要考虑使用代理(例如)。

暂无
暂无

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

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