【问题标题】:docker-compose shared volumes between servicedocker-compose 服务之间的共享卷
【发布时间】:2020-01-13 21:42:03
【问题描述】:

我想将文件从一项服务共享到另一项服务。 我做一个简短的例子。

  • Docker-compose.yml
  • 手机:
    • 码头文件
    • app.apk
  • 网站:
    • 码头文件

docker-compose.yml

version: "3.7"

services:
  web:
    build: ./web
    depends_on: 
      - mobile
    volumes:
      - data-volume:/var/lib/shared

  mobile:
    build: ./mobile
    volumes:
      - data-volume:/var/lib/shared

volumes:
  data-volume:

Dockerfile.yml(移动)

FROM node:alpine AS mobile

COPY app.apk /var/lib/shared

RUN ls /var/lib/shared

Dockerfile.yml(网络)

FROM node:alpine AS web

RUN ls /var/lib/shared

所以我想在 web 服务中查看来自移动服务的 app.apk。

我尝试在 docker-compose 中使用卷,但它不起作用。我试图弄清楚几个小时。

有人知道怎么做吗?

【问题讨论】:

    标签: docker docker-compose dockerfile docker-volume


    【解决方案1】:

    首先执行 dockerfile。 compose-file 然后覆盖共享文件夹。您无法访问 dockerfiles 中的卷。

    • 当您第一次构建 docker-container 时,您的 app.apk 会被复制到 docker-image 中。
    • 然后 compose 启动容器并将新的(可能是空的)文件夹挂载到 /var/lib/shared
    • 然后 /var/lib/shared 的旧内容被新内容“覆盖”,您无法再访问旧内容。

    解决方案:启动容器后将应用复制到volume中。

    使用docker exec -it <container_name> bash,您可以在容器启动后在容器中启动一个shell。您可以使用docker ps 找到名称。

    【讨论】:

    • 好的,我如何等到容器启动后再复制我的应用程序?
    • 使用docker exec -it <container_name> bash,您可以在容器启动后在容器中启动一个shell。您可以使用docker ps 找到名称。
    • 好的,但这是一个学校项目,我只能使用 docker-compose build 和 docker-compose up。你对此有什么想法吗?
    • RUN 中的命令是在挂载卷之后执行的。例如,您可以使用它将内容复制到带有 cp 的卷中。 (这很hacky,我不建议在任何其他设置中使用它)
    • 等等,我犯了一个错误。你需要CMD 而不是RUN
    猜你喜欢
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    相关资源
    最近更新 更多