【发布时间】:2025-12-14 15:00:02
【问题描述】:
我有一个关于 Docker 的问题。我正在运行一个 Docker:dind 容器,我通过 API 对其进行控制。我正在使用以下命令调用 Dind 容器
docker run --network some_network --prvileged -e DOCKER_TLS_CERTDIR= -d -p 2375:2375 -p 2376:2376 -v TransformationData:/mnt docker:dind
通过命名卷,我的数据进入 /mnt 目录中的 Dind 容器。
现在变得棘手了。我想通过 API 运行一个容器,该 API 转换 /mnt 目录中的数据并将转换后的数据保存在同一目录中,因此我可以通过命名卷使用它。以下是 API 调用
<REQUEST OPERATION="POST" URL="/containers/create" CONTENT-TYPE="application/json">
<CONTENT>
{
"Image": "citygml4j/citygml-tools",
"AttachStdin": true,
"HostConfig": {"Binds": [
"/mnt:/data[[r]shared, [rw]]"
]}} ,
"Cmd":[
"to-cityjson",
"/data"
]
}
</CONTENT>
</REQUEST>
<REQUEST OPERATION="POST" CONTENT-TYPE="application/json">
<xsl:attribute name="URL">/containers/<xsl:value-of select="substring(//CONTENT,11, 7)" />/start</xsl:attribute>
<CONTENT>{}</CONTENT>
</REQUEST>
容器被创建、运行和退出,但 /mnt 目录中的数据保持不变。而不是“绑定”配置,我还尝试了具有相同结果的“挂载”配置。
此问题的一个可能原因是 citygml-tools 容器对主机的 /mnt 目录没有写入权限。我试图用特权标签来解决这个问题,但没有奏效。 “绑定”中的 [[r]shared, [rw]] 部分也应该允许写入,但它也不起作用。
令人讨厌的部分是,citygml-tools 容器没有提供任何错误消息或 Lo 文件,所以我在尝试时实际上并不知道发生了什么。现在只是试错之类的事情......
长话短说:从容器访问主机数据并从容器将数据写入主机文件系统的最佳实践是什么?
关于 citygml-tools 的其他信息:
【问题讨论】:
-
您在
docker run命令中拼错了“特权” -
如果目标是读写主机文件,可以直接在主机上运行进程吗?您是否需要中间的 Docker-in-Docker 层(这会显着增加复杂性,而且有点不寻常)?
-
@DavidMaze 我正在从另一个容器开始转换容器——它正在与 API 通信——我想避免将主机套接字直接安装到该容器,因此使用了中间的 Dind 容器。但是如果没有解决方案这样做,安装主机套接字也应该是可能的。