在容器之间共享Docker容器存储量

时间:2018-09-19 09:56:59

标签: docker

作为练习,我试图设置三个Docker容器。

  • container1(作为纯存储卷)
  • container2(Java应用程序)
  • container3(作为纯存储卷)

现在,在container2上运行的Java应用程序(使用Apache Camel)应该侦听container1卷上的文件添加并将它们传输到container3卷上。

我当时正在考虑在存储容器上安装FTP映像,但是我认为它们的卷可以暴露。

此用例的更好方法是什么?

2 个答案:

答案 0 :(得分:0)

您只需添加指向同一目录的卷即可:

  • 容器1:/ opt / deposite:/ opt / data
  • 容器3:/ opt / done:/ opt / data

容器2可以有3个卷:

  • 第1卷供其自己的数据 / opt / app:/ opt / app
  • 第2卷与容器1共享的卷: / opt / deposite:/ opt / deposite
  • 第3卷与容器2共享的卷: / opt / done:/ opt / done

您的Java应用程序可以简单地用批处理检查第2卷的文件夹,并将文件放在第3卷的文件夹中

答案 1 :(得分:0)

是的,你是对的。它们的数量可以被公开,这并不难实现。例如,您可以尝试运行下一个准备好的docker-file:

#########################################################################
version: '3.3'                                                            
services: 
#########################################################################

  container-1:
    container_name: "test-container1"
    image: ubuntu:16.04
    volumes:
      - "$HOME/data/container-1:/root/data"

    command: ["/bin/bash", "-c", "echo 'Hello world!' > \
      /root/data/someFileFromContainer-1"]
#########################################################################    

  container-2:
    container_name: "test-container2"
    image: ubuntu:16.04
    depends_on:
      - container-1
    volumes:
      - "$HOME/data:/root/data"

    command: ["/bin/bash", "-c", "/bin/sleep 3s && \
      mv /root/data/container-1/someFileFromContainer-1 /root/data/container-3/"]
#########################################################################

  container-3:
    container_name: "test-container3"
    image: ubuntu:16.04
    volumes:
      - "$HOME/data/container-3:/root/data"
    depends_on:
      - container-2

    command: ["/bin/bash", "-c", "sleep 5s && \ 
      cat /root/data/someFileFromContainer-1"]
#########################################################################

尝试执行以查看结果(来自第一个容器/“ Hello world!”中创建的文件中的数据):

docker-compose up -d && docker logs -f test-container3

  • $ HOME / data / container-1已安装到容器1
  • $ HOME /数据已安装到container-2(它可以查看子文件夹并在其中运行)
  • $ HOME / data / container-3已安装到container-3