要在路径中构建的 docker-compose 目录

Ter*_*ian 6 docker microservices docker-compose

我试图将我的应用程序分成两个 Docker 服务 - 前端和后端,我的项目布局看起来与此类似。

\n\n
| frontend\n|  - ...\n|  - Dockerfile.prod\n| backend\n|  - ...\n|  - Dockerfile.prod\n| docker-compose.yml\n
Run Code Online (Sandbox Code Playgroud)\n\n

到目前为止,我只编写了前端的 dockerfile

\n\n
FROM node:13.12.0-alpine as build\nWORKDIR /app\nENV PATH /app/node_modules/.bin:$PATH\nCOPY package.json ./\nCOPY package-lock.json ./\nRUN npm ci --silent\nRUN npm install react-scripts@3.4.1 -g --silent\nCOPY . ./\nRUN npm run build\n\nFROM nginx:stable-alpine\nCOPY --from=build /app/build /usr/share/nginx/html\nCOPY nginx/nginx.conf /etc/nginx/conf.d/default.conf\nEXPOSE 80\nCMD ["nginx", "-g", "daemon off;"]\n
Run Code Online (Sandbox Code Playgroud)\n\n

令我困扰的是,当我独立运行该图像时,一切都完美运行,但是当我尝试将其放入文件中时,docker-compose.yml此错误就会出现

\n\n
$ \xee\x82\xb0 docker-compose.exe up -d --build\nBuilding frontend\nTraceback (most recent call last):\n  File "docker-compose", line 6, in <module>\n  File "compose\\cli\\main.py", line 72, in main\n  File "compose\\cli\\main.py", line 128, in perform_command\n  File "compose\\cli\\main.py", line 1077, in up\n  File "compose\\cli\\main.py", line 1073, in up\n  File "compose\\project.py", line 548, in up\n  File "compose\\service.py", line 351, in ensure_image_exists\n  File "compose\\service.py", line 1106, in build\n  File "site-packages\\docker\\api\\build.py", line 148, in build\nTypeError: You must specify a directory to build in path\n[12540] Failed to execute script docker-compose\n
Run Code Online (Sandbox Code Playgroud)\n\n

我浏览过类似的问题,但由于某种原因,他们的建议似乎都不适用于我的场景。

\n\n

这是我的docker-composer文件

\n\n
version: \'3\'\n\nservices:\n  frontend:\n    container_name: react-prod\n    build:\n      context: .\n      dockerfile: frontend/Dockerfile.prod\n    ports:\n      - 6666:80\n
Run Code Online (Sandbox Code Playgroud)\n

jam*_*ani 14

在前端的 Dockerfile 中,您使用相对路径复制:COPY . ./

当您使用 docker-compose 构建时,您提供的上下文将是.而不是其中包含 Dockerfile 的实际前端目录。所以我只是建议你也许在 docker-compose.yml 中而不是:

    build:
      context: .
      dockerfile: frontend/Dockerfile.prod
Run Code Online (Sandbox Code Playgroud)

你应该有:

    build:
      context: ./frontend
      dockerfile: Dockerfile.prod
Run Code Online (Sandbox Code Playgroud)