【问题标题】:Docker: Write to disk of linked containerDocker:写入链接容器的磁盘
【发布时间】:2018-03-23 22:20:23
【问题描述】:

我有一个运行简单 Web 应用程序的 Docker 容器。该容器通过 Docker Compose 使用以下 docker-compose.yml 文件链接到其他两个容器:

version: '2'

services:
  mongo_service:
    image: mongo
    command: mongod
    ports:
      - '27017:27017'

  tomcat_service:
    image: 'bitnami/tomcat:latest'
    ports:
      - '8080:8080'

  web:
    # gain access to linked containers
    links:
      - mongo_service
      - tomcat_service
    # explicitly declare service dependencies
    depends_on:
      - mongo_service
      - tomcat_service
    # set environment variables
    environment:
      PYTHONUNBUFFERED: 'true'
    # use the image from the Dockerfile in the cwd
    build: .
    ports:
      - '8000:8000'

一旦web容器启动,我想在tomcat_service容器上写一些内容到/bitnami/tomcat/data/。我尝试从 web 容器中写入该磁盘位置,但出现异常:

没有这样的文件或目录:'/bitnami/tomcat/data/'

有谁知道我可以做些什么才能从web 容器写入tomcat_service 容器?对于其他人可以就这个问题提供的任何建议,我将不胜感激!

【问题讨论】:

  • 为什么要从一个容器写入另一个容器?
  • @jrtapsell 我基本上想将 .war 文件加载到我的 tomcat 容器中。 war 文件是在web 容器中以编程方式生成的。我应该在web 容器中构建tomcat 吗?我喜欢通过 compose 单独容器的清洁度,但也许这不可行
  • 您也许可以使用多阶段构建来进行战争,然后使用它来创建内置的 tomcat 映像

标签: docker networking docker-compose dockerfile


【解决方案1】:

如果您希望一项服务写入另一项服务,则必须使用 docker 卷。如果 web 写入 someFolderName,tomcat_service 中将存在相同的文件。

version: '2'

services:

  tomcat_service:
    image: 'bitnami/tomcat:latest'
    volumes:
      - my_shared_data:/bitnami/tomcat/data/

  web:
    volumes:
      - my_shared_data:/someFolderName

volumes:
  my_shared_data:

volumes 中的数据保持不变,即使在您下次重新创建 docker 容器时,它们也将可用。在 docker 容器中写入一些数据时,您应该始终使用 docker 卷。

【讨论】:

  • 太棒了,非常感谢您的留言;我认为这些卷在这里可能会有所帮助,但是您已经使这一点更清楚了。只是为了检查:如果我在webtouch /someFolderName/success.jsontomcat 是否能够阅读/bitnami/tomcat/data/success.json
  • 是的,你也可以使用my_shared_data:/bitnami/tomcat/data/:ro挂载只用于读取到tomcat的卷
猜你喜欢
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 2021-10-16
  • 1970-01-01
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多