我有docker映像,并且目录'A'挂载在主机目录'hostA'中。在目录**hostA**
中,有一个文件file0。当我直接在A中构建docker映像时,有一个文件file1。更清楚地说,我将它们显示如下:
In host:
hostA:
- file0
In docker container:
A:
- file1
[当我使用docker映像启动docker容器时。由于容器启动时目录A已安装在主机目录**hostA**
中,并且hostA存在,因此A中的file1将不会出现,尽管它已构建在Docker映像中。相反,file0将在目录A中可用,因为它在hostA
我的问题是是否有办法(在构建docker映像期间或在启动docker容器期间),使文件1在dir A(和主机dir hostA中)也可用。这意味着在容器启动后,它将是
In host:
hostA:
- file0
- file1
In docker container:
A:
- file0
- file1
提前感谢。
不,据我所知。由于Docker卷挂载的工作方式与常规的unix挂载相同,因此您不会在Docker容器中看到该文件。通常,您将那些在容器的生命周期内将更改的目录(例如本地开发期间的源代码)和那些不会更改的目录(例如,使用JavaScript时的node_modules)分开。
我可以为您概述两个接近您所需解决方案并且可能对您有用的想法。
您可以将容器目录A
分为AA
和AB
。 AA
包含在构建期间添加的文件,而AB
包含要在容器中装入的文件。然后,您可以使用../AB/some_file
之类的相对路径从容器中的文件引用已装入的文件。
# /A/AA/file1.js require '../AB/file0';
In host: hostA: - file0 In docker container: A: AA: - file1 AB: # mounted - file0
安装单个文件
作为另一种选择,您可以装载单个文件。如果您只需要将几个文件(如配置)装载到容器中,那将是一个有效的解决方案。
Docker:
-v "PWD"/hostA/file0:/A/file0
docker-compose:
somes_service: volumes: - hostA/file0:/A/file0
仍然,来自容器
file1
的文件在您的主机上将不可用。在那种情况下,您也可以将安装的文件设置为只读。
hostA/file0:/A/file1:ro
希望有帮助。