使用`docker run`覆盖文件

时间:2016-02-29 17:12:30

标签: docker

在阅读文档时可能我错过了这个,但在发出docker run命令时是否有办法覆盖容器文件系统上的文件?

类似于Dockerfile COPY命令的东西?这里的关键愿望是能够采用特定的Docker image,然后旋转几个相同的图像,但使用不同的配置文件。 (我更喜欢用环境变量来做这件事,但是我对Dockerizing的应用并不偏袒。)

1 个答案:

答案 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>在主机文件系统上。