将主机中的空文件夹装载到Docker中的非空文件夹
我正在使用的工具以Docker图像的形式提供。由于安装该工具非常复杂,并且有一系列依赖项,因此我希望使用IDE在主机上工作,但在容器上运行它 因此,在下载并加载图像后,我运行:将主机中的空文件夹装载到Docker中的非空文件夹,docker,Docker,我正在使用的工具以Docker图像的形式提供。由于安装该工具非常复杂,并且有一系列依赖项,因此我希望使用IDE在主机上工作,但在容器上运行它 因此,在下载并加载图像后,我运行: sudo docker run -it -v /home/myself/WIP/thetool:/home/thetool name/label 如果没有安装,工具位于/home/tool下,但是如果安装,此文件夹为空(因为主机中的文件夹为空) 我是否需要从容器中复制工具,然后将其装载,或者有一种方法可以直接执行此操作
sudo docker run -it -v /home/myself/WIP/thetool:/home/thetool name/label
如果没有安装,工具位于/home/tool
下,但是如果安装,此文件夹为空(因为主机中的文件夹为空)
我是否需要从容器中复制工具,然后将其装载,或者有一种方法可以直接执行此操作。对于这一点,主机卷的设计是将文件从主机注入容器,并允许您从容器外部管理文件 您可以将工具作为容器入口点的一部分从容器中复制出来,但是您需要将卷装载到与容器中目录不同的位置,以便使源目录和目标目录都可用。此示例的入口点如下所示:
#!/bin/sh
if [ ! -d "/data" ]; then
ln -s /data_save /data
elif [ -z "$(ls -A /data)" ]; then
cp -a /data_save/. /data/
fi
exec "$@"
然后,该映像的Dockerfile将复制并配置该入口点:
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
实际上,您可以使用具有显式设备装入点的docker卷来实现这一点 如果目录/home/imf/WIP/thetool为空,请执行以下操作: 创建一个docker卷:
启动容器并装载创建的卷:
sudo docker run -it -v tool_vol:/home/thetool name/label
现在,容器中
/home/thetool
中的数据将在/home/my/WIP/thetool
中可用,即使主机文件夹最初是空的。Docker compose for yamenk伟大的答案是:
version: '2'
services:
your_service:
volumes:
- tool_vol:/home/thetool
build: .
command: your_command
volumes:
tool_vol:
driver: local
driver_opts:
type: none
device: /home/myself/WIP/thetool
o: bind
可能重复:很好地使用带有绑定装载的命名卷,+1。请注意,这仅在目录为空时有效,一旦其中有文件或容器最后一个实例的内容,docker将不会初始化它。谢谢。是的,它的行为类似于正常的卷。如果卷已经存在,则将装入该卷,否则将使用容器装入点的内容创建该卷。
version: '2'
services:
your_service:
volumes:
- tool_vol:/home/thetool
build: .
command: your_command
volumes:
tool_vol:
driver: local
driver_opts:
type: none
device: /home/myself/WIP/thetool
o: bind