我得到一个错误,而dockerization我的nodejs项目



我正在尝试dockerize一个项目的应用程序。我使用node.js作为我的服务器。在dockerization的过程中,它抛出这个错误:

cloud_project2-projectapp-1           | npm ERR! code ENOENT
cloud_project2-projectapp-1           | npm ERR! syscall open
cloud_project2-projectapp-1           | npm ERR! path /projectapp/package.json
cloud_project2-projectapp-1           | npm ERR! errno -2
cloud_project2-projectapp-1           | npm ERR! enoent ENOENT: no such file or directory, open '/projectapp/package.json'
cloud_project2-projectapp-1           | npm ERR! enoent This is related to npm not being able to find a file.
cloud_project2-projectapp-1           | npm ERR! enoent 

这是我的Dockerfile:

FROM node:18-alpine
WORKDIR /projectapp
COPY package*.json .
RUN npm ci
COPY . .
ENV PORT = 8080
EXPOSE 8080
CMD ["npm","run","devStart"]

dockerfile和我在很多视频和文档中看到的完全一样。我相信这个错误是在RUN npm ci命令中抛出的,由于某种原因它找不到包。json文件,即使我复制它在上面的命令。我也搜索了一些答案,也许这是一个特权问题,但我是linux的新手,很难理解这些。

我在mysql和keyrock中得到了更多的错误,但我稍后会调试这些错误。

version: "3.9"
networks:
idm_network:
driver: bridge
#project images
services:
projectapp:
build:
context: ./projectapp
networks:
- idm_network
volumes:    
- .:/projectapp   #for development phase only
ports:
- "8080:8080"  
mysql:
build:
context:
./mysql
networks:
- idm_network
volumes:
- project-mysql-data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=idm
- MYSQL_ROOT_HOST=%

keyrock:
image: fiware/idm:latest  
networks:
- idm_network
depends_on:
- mysql
environment:
- IDM_DB_HOST=mysql

mongo-orion:
image: mongo:latest
volumes:
- project-mongo-orion-data:/data/db
networks:
- idm_network
command: --nojournal
orion:
image: fiware/orion
links:
- mongo-orion
networks:
- idm_network
command: -dbhost mongo-orion
mongo-data:
build:
context: ./mongoData
volumes:
- project-mongo-data:/data/db
networks:
- idm_network
data-storage-server:
build:
context: ./dataStorageServer
volumes:   
- .:/dataserver  #for development phase only
depends_on:
- mongo-data
networks:
- idm_network
#pep-proxy-datastorage:
#  image: fiware/pep-proxy:latest
#  networks:
#    - idm_network
#pep-proxy-orion:
#image: fiware/pep-proxy:latest
#networks:
#  - idm_network
#project volumes
volumes:
project-mysql-data:
project-mongo-orion-data:
project-mongo-data:

删除projectapp下的volumes:

这个块的作用是用主机系统的内容替换图像中的整个应用程序。(想象一下,正常安装Node的一个副本,然后分别检出Node的源代码,并将其解压缩到已经安装的Node上。)没有特别的保证或检查图像和主机内容"匹配"。像node_modules树这样的东西,图像npm installs也被隐藏了。

在您的示例中,您从./projectapp子目录构建映像,但是在映像代码上绑定挂载当前目录.。这将导致在运行容器时没有package.json,从而产生您所看到的错误。

我可能对这个设置再做两个更改。如果您删除文件中所有的networks:块,Compose将创建一个名为default的网络,并将所有容器附加到它;这将以与您现在拥有的网络完全相同的方式工作,但需要更少的设置。您还可以使用一个简写的build: directoryname,其含义与您现在使用的build: { context: directoryname }相同。这样,再加上删除不必要的volumes:,将得到

version: '3.8'
services:
projectapp:
build: ./projectapp
ports:
- "8080:8080"  
...
mongo-data:
build: ./mongoData
volumes:  # keep volumes for persistent database data
- project-mongo-data:/data/db
data-storage-server:
build: ./dataStorageServer
depends_on:
- mongo-data

orion服务也有过时的links:选项,你可以只是删除该块以及(或将其更改为depends_on:);名称mongo-orion仍然可以通过正常的Docker网络解析。

问题是我有这样一行:

volumes:    
- .:/projectapp   #for development phase only

这样我就不必每次修改时都重新启动docker,但是它产生了一个问题。

相关内容

  • 没有找到相关文章

最新更新