docker在服务之间组合共享卷

docker在服务之间组合共享卷,docker,docker-compose,dockerfile,docker-volume,Docker,Docker Compose,Dockerfile,Docker Volume,我想将文件从一个服务共享到另一个服务。 我举一个简短的例子 Docker-compose.yml 流动电话: dockerfile app.apk 网站: dockerfile docker-compose.yml version: "3.7" services: web: build: ./web depends_on: - mobile volumes: - data-volume:/var/lib/shared mo

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

  • Docker-compose.yml
  • 流动电话:
    • dockerfile
    • app.apk
  • 网站:
    • dockerfile
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(移动)

Dockerfile.yml(web)

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

我尝试在docker compose中使用卷,但它不起作用。我已经想了好几个小时了


有人知道怎么做吗?

首先执行dockerfile。然后,撰写文件将覆盖共享文件夹。您无法访问DockerFile中的卷

  • 当您第一次构建docker容器时,您的
    app.apk
    会被复制到docker映像中
  • 然后compose启动容器并将新文件夹(可能是空的)装载到
    /var/lib/shared
  • 然后,/var/lib/shared的旧内容被新内容“遮蔽”,您无法再访问旧内容
解决方案:启动容器后将应用复制到卷中


使用
docker exec-it bash
可以在容器中启动shell。您可以使用
docker ps
查找名称

好的,我如何等到容器启动后再复制我的应用程序?使用
docker exec-it bash
可以在容器中启动shell。你可以通过
docker ps
找到这个名字。好的,但这是一个学校项目,我只能使用docker compose build和docker compose up。您对此有什么想法吗?
RUN
中的命令是在装入卷后执行的。例如,您可以使用它将内容复制到具有cp的卷中。(这是非常骇客,我不建议在任何其他设置)等等,我犯了一个错误。为此,您需要
CMD
而不是
RUN
FROM node:alpine AS mobile

COPY app.apk /var/lib/shared

RUN ls /var/lib/shared
FROM node:alpine AS web

RUN ls /var/lib/shared