在阅读文档时可能我错过了这个,但在发出docker run
命令时是否有办法覆盖容器文件系统上的文件?
类似于Dockerfile
COPY
命令的东西?这里的关键愿望是能够采用特定的Docker image
,然后旋转几个相同的图像,但使用不同的配置文件。 (我更喜欢用环境变量来做这件事,但是我对Dockerizing的应用并不偏袒。)
答案 0 :(得分:8)
您有几个选择。使用docker-compose
之类的内容,您可以使用基本图像作为模板自动为每个容器构建唯一的图像。例如,如果您有docker-compose.yml
看起来很喜欢:
container0:
build: container0
container1:
build: container1
然后在container0/Dockerfile
里面你有:
FROM larsks/thttpd
COPY index.html /index.html
在container0/index.html
内,你有任何内容
想要,然后运行docker-compose build
会生成唯一的
每个条目的图像(并且正在运行docker-compose up
将开始
一切都好了。
我把上面的一个例子放在一起 here
只使用Docker命令行,您可以使用主机卷安装,
它允许您将文件挂载到容器中
目录。再次使用我的thttpd
作为示例,您可以使用
跟随-v
参数覆盖容器中的/index.html
与您选择的内容:
docker run -v index.html:/index.html larsks/thttpd
你可以通过docker-compose
完成同样的事情
volume
条目:
container0:
image: larsks/thttpd
volumes:
- ./container0/index.html:/index.html
container1:
image: larsks/thttpd
volumes:
- ./container1/index.html:/index.html
我建议使用build
机制更有意义,如果您尝试覆盖许多文件,而使用卷可以用于一个或两个文件。
这两种机制的主要区别在于,在构建图像时,每个容器都有文件的副本,而使用卷安装时,对图像中文件所做的更改将被反映出来< em>在主机文件系统上。