Docker compose:如何在不使用命名卷或多阶段构建的情况下在服务之间共享数据
有没有办法在容器之间共享数据。有以下docker编写文件Docker compose:如何在不使用命名卷或多阶段构建的情况下在服务之间共享数据,docker,docker-compose,Docker,Docker Compose,有没有办法在容器之间共享数据。有以下docker编写文件 version: '3' services: app_build_prod: container_name: 'app' build: context: ../ dockerfile: docker/Dockerfile args: command: build:prod nginx:
version: '3'
services:
app_build_prod:
container_name: 'app'
build:
context: ../
dockerfile: docker/Dockerfile
args:
command: build:prod
nginx:
container_name: 'nginx'
image: nginx:alpine
ports:
- "80:80"
depends_on:
- app_build_prod
Dockerfile内容为:
FROM node:10-alpine as builder
## Installing missing packages, fixing git self signed certificate issue
RUN apk update && apk upgrade && \
apk add --no-cache bash git openssh && \
rm -rf /var/cache/apk/* && \
git config --global http.sslVerify false
## Defigning app directory
WORKDIR /usr/app
## Copying files. Files listed in .dockerignore are omitted
COPY . .
## node_modules are on a separate intermediate image will prevent unnecessary npm installs at each build
RUN npm ci
## Declaring arguments and environment variables. Important to declara env var to consume them on run stage
ARG command=build:prod
ENV command=$command
ENTRYPOINT npm run ${command}
尝试使用@Robert's,但无法使其工作-应用程序容器崩溃,原因是:
EBUSY:资源正忙或已锁定,rmdir'/usr/app/dist错误:EBUSY:资源正忙或已锁定,rmdir'/usr/app/dist' 我的假设是,
/usr/app/dist
目录是以只读访问方式装载的,因此,在构建之前尝试删除它时,会抛出一个错误
需要按照以下方向发送数据
app_build_prod:/usr/app/dist => nginx:/usr/share/nginx/html
我遇到同样的问题,将共享更改为使用build: 并将docker compose更改为:
version: '3'
services:
nginx:
container_name: 'nginx'
build:
...
ports:
- "80:80"
这回答了你的问题吗?没有@Robert的方法使容器崩溃。为什么你说它不能是多阶段构建?这是正确的Docker模式。@DavidMaze Dockerfile只是一个生成器。nginx是有条件的。例如,只有当应用程序在
build:prod
模式下运行时,我们才需要运行nginx容器。此外,还有15个docker compose服务(通过不同的容器构建脚本:测试
,跟踪
,观察
,等等…)谢谢你,伙计。我曾经通过使用多阶段构建来实现这一点,但我不能在这种特殊情况下使用它,我需要找到一种只使用docker compose的方法!我可以问一下为什么应用程序容器会崩溃吗?我认为最主要的原因是权限错误检查应用程序\u构建\u产品用户它崩溃是因为“EBUSY:资源繁忙或已锁定”。更新问题
version: '3'
services:
nginx:
container_name: 'nginx'
build:
...
ports:
- "80:80"