Docker:将目录从一个容器挂载到另一个容器

时间:2015-10-19 09:13:34

标签: docker dockerfile

我有两个泊坞窗图像。其中一个docker镜像(来自第一个容器)在运行时会生成一些文件,这些文件需要由另一个容器使用。

我可以这样做吗?

4 个答案:

答案 0 :(得分:17)

Rene的答案有效,但您可以在不使用主机目录(container1 ==> container2)的情况下共享数据:

docker run -v /data/myfolder --name container1 image-name-1
docker run --volumes-from container1 image-name-2

答案 1 :(得分:10)

Oracle在2015年的网站上有一个例子(不再提供)。基于此我创建了

https://github.com/BITPlan/docker-stackoverflowanswers/tree/master/33232991

<强> Dockerfile.data

# Dockerfile that modifies ubuntu to create a data volume container
FROM ubuntu:14.04
RUN mkdir -p /var/www/html
RUN echo "This is the content for file1.html" > /var/www/html/file1.html
RUN echo "This is the content for file2.html" > /var/www/html/file2.html
RUN echo "This is the content for index.html" > /var/www/html/index.html
VOLUME /var/www/html
ENTRYPOINT /usr/bin/tail -f /dev/null

表示数据图像和

<强> Dockerfile

# Ubuntu image
FROM ubuntu:14.04

为图像测试仅使用其他数据卷。

docker build -t bitplan/dataonly:0.0.1 -f Dockerfile.data . 
docker build -t bitplan/dataexample:0.0.1 .

构建这些图像

他们现在都在我的图片列表中显示:

docker images | grep data

wf@mars:~/source/docker/stackoverflow2>    docker images | grep data
bitplan/dataonly          0.0.1               aa6aeb923f55        9 minutes ago       188.4 MB
bitplan/dataexample       0.0.1               a005e6b7dd01        7 days ago          188.4 MB

使用

完成运行和测试
docker run -d --name html bitplan/dataonly:0.0.1
docker run --volumes-from html bitplan/dataexample:0.0.1 ls /var/www/html

显示:

0ebb78f209169fb7d281bb6b06851b33af7a98488c3a38cf25ac92fe983fff43
file1.html
file2.html
index.html

答案 2 :(得分:9)

这非常简单。您必须将一个目录共享到两个不同的容器,然后同时访问该目录中的相同数据。

<div id="content">
    <div id='smoke_screen' style='z-index: 1000; position: fixed; top: 0; left: 0; bottom: 0; right: 0' />
    <!-- lots of stuff that has to not be clickable while "smokeScreen is visible" -->
    <!-- lots of stuff that has to not be clickable while "smokeScreen is visible" -->
    <div id="smokeScreen">
        <!-- covers whole viewport -->
        <div id="form" style='z-index: 1001'><!-- another form stuff here --></div>
        <!-- covers whole viewport -->
    </div>

   <!-- lots of stuff that has to not be clickable while "smokeScreen is visible" -->
  <!-- lots of stuff that has to not be clickable while "smokeScreen is visible" -->
</div>

答案 3 :(得分:0)

对我来说,我只是使用 --volumes-from 将 2 个或更多卷从一个容器挂载到另一个容器 Dockerfile1

FROM alpine:3.7

MAINTAINER john "john@gmail.com"

ENV REFRESHED_AT=2021-02-01 \

VOLUME ["/mount1", "/mount2"]

CMD ["tail", "-f", "/dev/null"]

EXPOSE 80 

Dockerfile2

FROM ubuntu:16.04

MAINTAINER john "john@gmail.com"

ENV REFRESHED_AT=2021-02-01 \

VOLUME ["/mount1", "/mount2"]

CMD ["tail", "-f", "/dev/null"]

EXPOSE 80 

您构建了其中的 2 个,然后通过在 Dockerfile 内外创建文件夹来创建第一个容器。对于第二个容器,您只需发出此属性 --volumes-from <first container>。这个方法意味着第二个容器会从第一个容器挂载2个挂载点到第二个容器。