我正在尝试将Angular 7客户端应用程序连接到本地的docker compose中。
泊坞窗组成时出现以下错误:
client-app | npm ERR! errno -2
client-app | npm ERR! syscall open
client-app | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
Dockerfile:
FROM node:9.6.1
RUN mkdir -p /app
WORKDIR /app
EXPOSE 4200
ENV PATH /app/node_modules/.bin:$PATH
COPY . /app
RUN npm install --silent
RUN npm rebuild node-sass
CMD ["npm", "run", "docker-start"]
客户的组成部分是:
client-app:
image: ${DOCKER_REGISTRY-}client
container_name: client-app
ports:
- "4200:81"
build:
context: .
dockerfile: ClientApp/Dockerfile
package.json位于Dockerfile的ClientApp文件夹中,我假设为COPY。 / app应该将package.json复制到容器中。我在dockerignore中没有任何排除项。我正在将Docker用于Windows和Unix容器。我之前尝试过npm init(但是无论如何都会创建一个空的package.json),并仔细查看SO帖子,但是大多数dockerfile定义看起来完全一样。我还尝试了:COPY package * .json ./并使用--no-cache构建映像。
答案 0 :(得分:1)
此命令<script src="/js/jquery.min.js"></script>
<script src="/js/jquery-ui.js"></script>
<script src="/js/bootstrap.min.js"></script>
将尝试从根目录复制COPY package*.json ./
。但是,您似乎需要从package.json
目录中复制package.json
两种解决方法:
1)更改撰写文件ClientApp
2)更改docker文件context: ./ClientApp/
我认为最好更改docker文件,因为在功能中您可能希望从根目录复制一些文件
答案 1 :(得分:1)
您的Dockerfile很好,并且不需要COPY package*.json ./
-它将与您的整个应用程序一起复制。
问题在于您的docker-compose文件。
您定义的:
build:
context: .
dockerfile: ClientApp/Dockerfile
这意味着您的Dockerfile将接受docker-compose上下文,该上下文位于上面的1个目录中:
├── docker-compose.yml -- this is the actual context
└── ClientApp
├── Dockerfile -- this is the expected context
因此,当CMD运行时,它位于package.json上方的1个目录中,因此它无法运行该命令,并且容器将退出。
要修复此问题,请为您的docker-compose文件提供正确的上下文:
build:
context: ClientApp
dockerfile: Dockerfile
它应该可以工作。