在两个Docker容器之间共享文件

时间:2019-10-13 11:30:54

标签: docker devops

如何在2个不同的容器之间共享文件?我需要一些用于现有容器的Yamal文件设置。 有人有简单的例子吗?

2 个答案:

答案 0 :(得分:0)

这是一个简单的玩具示例,展示了docker中的基本卷的使用

docker-compose.yml

version: "3.7"
services:
    container1:
        image: alpine:latest
        volumes:
            - type: bind
              source: ./mydata
              target: /opt/app/static
        entrypoint:
            - cat
            - /opt/app/static/conf.yml

    container2:
        image: alpine:latest
        volumes:
            - type: bind
              source: ./mydata
              target: /opt/app/static2
        entrypoint:
            - cat
            - /opt/app/static2/conf.yml

conf.yml(位于mydata文件夹下)

a simple text file

容器已安装在本地mydata文件夹中

运行docker-compose up时,将创建容器并将conf.yml文件的内容输出到stdout

...
container2_1  | a simple text file
container1_1  | a simple text file

docker-compose文件带有版本3.7注释,但与版本2.4+兼容,因此也可以像

那样编写
volumes:
  - ./mydata:/opt/app/static

答案 1 :(得分:0)

您应该将相同的文件夹/卷安装到所有正在运行的容器中: 例: docker-compose.yaml:

version: "3"

services: 
  first: 
    image: ubuntu:18.04
    command: /bin/sh -c "while sleep 1000; do :; done"
    volumes: 
      - "test:/data"

  second:
    image: ubuntu:18.04
    command: /bin/sh -c "while sleep 1000; do :; done"
    volumes:
      - "test:/data"

volumes:
  test:

运行:

docker-compose up -d
docker-compose exec first /bin/sh -c "echo 'Hello shared folder' > /data/example.txt"
docker-compose exec second /bin/sh -c "cat /data/example.txt"

您将看到:Hello shared folder 我们在两个容器的第一个写入文件和第二个读取容器之间共享相同的卷。