运行带有docker run --rm --network host --volume $PWD/some_dir:/tmp/some_dir ...
之类的docker容器时,我正在使用一个卷。在容器内,我正在运行Python代码,该代码创建目录/tmp/some_dir
(如果目录已经存在,则将其覆盖)并将文件放入其中。如果我在本地开发机上运行docker容器,则在运行容器后,文件将在/tmp/some_dir
的开发机上可用。
但是,如果我在gitlab-ci
作业中运行相同的容器(“ docker in docker”,则该容器不是作业本身使用的映像),则无法在/tmp/some_dir
中访问文件(该目录存在)。
丢失文件的原因可能是什么?
答案 0 :(得分:0)
您是否在正常服务器上检查了正常目录?
在DinD上下文中创建$ PWD / some_dir,结果应在运行Gitlab CI容器的服务器中的docker用户主目录中创建的some_dir中。
答案 1 :(得分:0)
docker run -v
选项的前半部分(如果是目录路径)是主机上专门的目录。如果容器可以访问Docker套接字并启动另一个容器,则它提供的任何目录映射都在主机文件系统的空间中,而不是在容器文件系统的空间中。 (如果您实际上是在使用Docker-in-Docker,则可能是运行嵌套Docker守护程序的容器的文件系统空间,但它仍然不是调用容器的文件系统空间。)
最直接的选择是在内部容器停止之后docker rm
之前,docker cp
将文件从内部容器中取出;它可以复制整个目录树。