gpt4 book ai didi

angular - 如何正确地将Docker Compose放置在与项目/dockerfile不同的路径中?

转载 作者:行者123 更新时间:2023-12-02 19:55:54 25 4
gpt4 key购买 nike

我的docker-compose.yml文件应放置在“解决方案”的根文件夹中,以便在调试时可以一次执行多个项目(我在Visual Studio上)。

这是我的docker-compose,位于我们解决方案的根目录(D:\ repos \ MySolution):

version: '3.7'

services:
web:
build:
context: ./MyAngularProject
dockerfile: Dockerfile
volumes:
- '.:/app'
- '/app/node_modules'
ports:
- '4200:4200'
environment:
- CHOKIDAR_USEPOLLING=true

这是我的Dockerfile,它位于解决方案内部的项目文件夹之一(D:\ repos \ MySolution \ MyAngularProject)中:
FROM node:12.10.0    
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json /app/package.json
RUN npm install
RUN npm install -g @angular/cli@8
COPY . /app
CMD ng serve --host 0.0.0.0

使用Dockerfile中的WORKDIR,它应该在 ng serve --host 0.0.0.0目录中执行 /app。但我收到此错误:

The serve command requires to be run in an Angular project, but a project definition could not be found.



我尝试使用此内容在我的有角项目(D:\ repos \ MySolution \ MyAngularProject)中创建另一个docker-compose文件,该文件可以正常工作:
version: '3.7'    
services:
web:
build:
context: .
dockerfile: Dockerfile
volumes:
- '.:/app'
- '/app/node_modules'
ports:
- '4200:4200'
environment:
- CHOKIDAR_USEPOLLING=true

我想念什么?谢谢!

最佳答案

问题可能与docker-compose.yml文件上的卷有关。
Dockerfile的构建部分运行良好,因为它不了解卷。然后,当您将卷挂载到容器中的现有目录(在本例中为/ app)上时,将无法看到以前在其中建立的文件,而是看到刚挂载的文件夹中的文件。这是预期的,并且与Linux挂载行为一致。

就是说,当您将./挂载到/app中的docker-compose.yml中时,在/app命令运行时CMD中唯一的东西是一个名为MyAngularProject的文件夹,而不是以前的 Angular 项目定义和其他文件。

当您将docker-compose.yml移到MyAngularProject时,其行为是完全相同的,但是现在它安装的文件夹具有CMD需要运行的内容。

因此,删除./:/app中的docker-compose.yml卷映射将解决此问题。

关于angular - 如何正确地将Docker Compose放置在与项目/dockerfile不同的路径中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57931643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com