Angularjs 如果本地项目中存在节点_模块,则Docker compose生成失败

Angularjs 如果本地项目中存在节点_模块,则Docker compose生成失败,angularjs,node.js,git,docker,Angularjs,Node.js,Git,Docker,我试图理解docker/docker compose的基础知识,所以我开始了自己的教学实验。基本上,我想测试以下的整个周期:在本地开发代码,编写docker和docker compose文件,推送到github repo,在测试目录中克隆repo,docker compose up-build并观察神奇之处。 为了测试所有这些,我使用了我已经编写的Angular应用程序。docker文件如下所示: # base image FROM node:10.13.0-jessie # set work

我试图理解docker/docker compose的基础知识,所以我开始了自己的教学实验。基本上,我想测试以下的整个周期:在本地开发代码,编写docker和docker compose文件,推送到github repo,在测试目录中克隆repo,docker compose up-build并观察神奇之处。 为了测试所有这些,我使用了我已经编写的Angular应用程序。docker文件如下所示:

# base image
FROM node:10.13.0-jessie

# set working directory
RUN mkdir /usr/src/app
WORKDIR /usr/src/app

# add `/usr/src/app/node_modules/.bin` to $PATH
ENV PATH /usr/src/app/node_modules/.bin:$PATH

# install and cache app dependencies
COPY package.json /usr/src/app/package.json
RUN npm install
RUN npm install -g @angular/cli

# add app
COPY . /usr/src/app

# expose port
EXPOSE 4200

# start app
CMD ng serve --host 0.0.0.0
Docker-compose.yml是:

version: '3.7'

services:
  myapp-frontend:
    container_name: frontend
    build: ./
    working_dir: /usr/src/app
    command: ng serve --host 0.0.0.0
    ports:
      - "4200:4200"
因此,除非我决定开始在测试文件夹上开发,否则一切都会按预期进行。在这种情况下,如果我再次尝试docker compose up-build,则在执行npm安装以下载所有node_模块后,构建将失败,并出现以下错误

Traceback (most recent call last):
  File "site-packages\docker\utils\build.py", line 96, in create_archive
OSError: [Errno 22] Invalid argument: 'path\\myapp-frontend\\node_modules \\.bin\\acorn'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "docker-compose", line 6, in <module>
  File "compose\cli\main.py", line 71, in main
  File "compose\cli\main.py", line 127, in perform_command
  File "compose\cli\main.py", line 1052, in up
  File "compose\cli\main.py", line 1048, in up
  File "compose\project.py", line 471, in up
  File "compose\service.py", line 336, in ensure_image_exists
  File "compose\service.py", line 1067, in build
  File "site-packages\docker\api\build.py", line 154, in build
  File "site-packages\docker\utils\build.py", line 31, in tar
  File "site-packages\docker\utils\build.py", line 100, in create_archive
OSError: Can not read file in context: path\myapp-frontend\node_modules\.bin\acorn
[27228] Failed to execute script docker-compose

据我所知,Angular应用程序的整个构建部分都发生在容器中,事实上,当我克隆repo时docker compose可以正常工作,那么为什么它突然关心本地OS项目中的node_模块呢

我真的不知道这种行为的原因,但您不应该在内部复制node_模块。见下面的评论

# install and cache app dependencies, **OK**
COPY package.json /usr/src/app/package.json
RUN npm install
RUN npm install -g @angular/cli

# add app, **this also copies your local node_modules, overwriting previously installed**
COPY . /usr/src/app
因此,您可以通过添加.dockrignore文件来解决此问题


尝试进入源映像内部,运行它即可

docker run --rm -it node:10.13.0-jessie bash
然后一步一步地尝试您的命令,调试并完全控制它。然后将工作内容添加到Dockerfile中

要将数据复制到正在运行的容器,请使用

docker cp package.json mycontainer:/usr/src/app/package.json
docker cp package.json mycontainer:/usr/src/app/package.json