docker-compose 目录构建路径
Posted
技术标签:
【中文标题】docker-compose 目录构建路径【英文标题】:docker-compose directory to build in path 【发布时间】:2020-08-06 07:57:49 【问题描述】:我正在尝试将我的应用程序拆分为两个 docker 服务 - 前端和后端,我的项目布局看起来与此类似。
| frontend
| - ...
| - Dockerfile.prod
| backend
| - ...
| - Dockerfile.prod
| docker-compose.yml
到目前为止,我只为前端编写了 dockerfile
FROM node:13.12.0-alpine as build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json ./
COPY package-lock.json ./
RUN npm ci --silent
RUN npm install react-scripts@3.4.1 -g --silent
COPY . ./
RUN npm run build
FROM nginx:stable-alpine
COPY --from=build /app/build /usr/share/nginx/html
COPY nginx/nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
困扰我的是,当我独立运行该图像时,一切正常,但是当我尝试将其放入 docker-compose.yml
文件时,此错误会出现
$ docker-compose.exe up -d --build
Building frontend
Traceback (most recent call last):
File "docker-compose", line 6, in <module>
File "compose\cli\main.py", line 72, in main
File "compose\cli\main.py", line 128, in perform_command
File "compose\cli\main.py", line 1077, in up
File "compose\cli\main.py", line 1073, in up
File "compose\project.py", line 548, in up
File "compose\service.py", line 351, in ensure_image_exists
File "compose\service.py", line 1106, in build
File "site-packages\docker\api\build.py", line 148, in build
TypeError: You must specify a directory to build in path
[12540] Failed to execute script docker-compose
我浏览过类似的问题,但由于某种原因,他们的建议似乎都不适用于我的场景。
这是我的docker-composer
文件
version: '3'
services:
frontend:
container_name: react-prod
build:
context: .
dockerfile: frontend/Dockerfile.prod
ports:
- 6666:80
【问题讨论】:
你的 docker 版本是多少? 我目前正在使用 docker 3 【参考方案1】:在前端的 Dockerfile 中,您使用相对路径进行复制:COPY . ./
。
当您使用 docker-compose 构建时,您提供的上下文将是 .
,而不是包含 Dockerfile 的实际前端目录。
所以我只是建议也许你在 docker-compose.yml 中而不是:
build:
context: .
dockerfile: frontend/Dockerfile.prod
你应该有:
build:
context: ./frontend
dockerfile: Dockerfile.prod
【讨论】:
以上是关于docker-compose 目录构建路径的主要内容,如果未能解决你的问题,请参考以下文章
docker-compose部署django+nginx+uwsgi+celery+redis+mysql
如何让 docker-compose 始终从新图像重新创建容器?