将主机中的空文件夹挂载到Docker中的非空文件夹

我正在使用的工具在Docker镜像中提供。 由于安装这个工具对于大量的依赖关系来说是非常复杂的,我想用我的IDE工作在主机上,但是在容器上运行它。

所以下载并加载图像后,我运行:

sudo docker run -it -v /home/myself/WIP/thetool:/home/thetool name/label 

如果没有安装,该工具位于/home/thetool ,但在安装时,该文件夹为空(因为主机中的文件夹为空)。

我需要从容器中复制工具,然后安装它,或者有一种方法可以直接进行。

你可以使用明确的设备挂载点来实现这个工作。

如果目录/ home / myself / WIP / thetool为空,请执行以下操作:

像这样创build一个docker卷:


 docker volume create --driver local \ --opt type=none \ --opt device=/home/myself/WIP/thetool \ --opt o=bind \ tool_vol 

启动容器并安装创build的卷:

 sudo docker run -it -v tool_vol:/home/thetool name/label 

现在,容器内的/home/thetool的数据将在/home/myself/WIP/thetool即使主机文件夹最初为空。

为了实现这个目的,主机卷被devise为将主机中的文件注入到容器中,并允许您从容器外部pipe理文件。

您可以将容器作为容器入口点的一部分从容器中复制出来,但是需要将容器安装在与容器中的目录不同的位置,以便使源和目标都可用。 此示例入口点如下所示:

 #!/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将复制并configuration该入口点:

 COPY entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"]