0
我们在Docker容器中使用Jenkins构建了一个NodeJS项目。Docker中的NodeJS - 无法访问node_modules
图像开始后的问题是taht - 我们有一个错误:
transform_1 | > node ./build/server.js transform_1 | transform_1 | module.js:472 transform_1 | throw err; transform_1 | ^ transform_1 | transform_1 | Error: Cannot find module './lib/express' transform_1 | at Function.Module._resolveFilename (module.js:470:15)
在建立詹金斯 - 我检查的权限,他们是OK:
... + ls -l node_modules/express/lib total 80 -rw-r--r-- 1 jenkins 1001 14202 Feb 28 12:18 application.js -rw-r--r-- 1 jenkins 1001 1954 Feb 28 12:18 express.js drwxr-xr-x 2 jenkins 1001 4096 Feb 28 12:18 middleware ...
但是从容器 - 有“权限被拒绝” 错误:
[email protected]:~$ docker run -ti automation/cms-transform-layer bash [email protected]:~$ ls -l node_modules/express/ ls: cannot access node_modules/express/lib: Permission denied ls: cannot access node_modules/express/node_modules: Permission denied total 124 -rw-r--r-- 1 app app 99111 Feb 28 12:18 History.md -rw-r--r-- 1 app app 1249 Feb 28 12:18 LICENSE -rw-r--r-- 1 app app 4541 Feb 28 12:18 Readme.md -rw-r--r-- 1 app app 224 Feb 28 12:18 index.js d????????? ? ? ? ? ? lib d????????? ? ? ? ? ? node_modules -rw-r--r-- 1 app app 4939 Feb 28 12:18 package.json
这到底是什么"d????????? ? ? ? ? ? node_modules"
?
的Dockerfile
是:
FROM node:7.5.0
RUN useradd --user-group --create-home --shell /bin/false app
ENV HOME=/home/app
USER root
COPY . $HOME/
RUN chown -R app:app $HOME/*
USER app
WORKDIR $HOME
CMD ["npm", "run", "start:production"]
UPD
相关条目中package.json
:
...
"contentful": "^3.8.0",
"express": "^4.14.0",
"jsum": "^0.1.1",
...
服务定义从docker-compose.yml
:
...
transform:
environment:
- LOGZ_TOKEN=""
- LOGZIO_API_KEY=""
- NPM_TOKEN=""
image: "company/transform-layer:latest"
restart: "always"
ports:
- "3003:3003"
...
这是詹金斯管道脚本:
...
def npmBuildTransform(repoUrl='1', env='2') {
docker.image('node').inside('-v /var/run/docker.sock:/var/run/docker.sock') {
git branch: "${BRANCH}", credentialsId: 'github', url: "${repoUrl}"
stage('Transform build') {
sh 'apt-get update && apt-get -y install rsync'
sh 'npm config set //registry.npmjs.org/:_authToken=$NPM_TOKEN'
sh 'npm install --production=false'
...
“已解决”:在'docker-compose.yml'文件中的'root' +'permfix'下创建了所有内容。 – setevoy
你是否也可以包含你的package.json脚本和你的docker-compose.yml文件?这是詹金斯管道? –
@PatrickScott谢谢你,帕特里克。更新。我确信在Docker-build期间CI服务器上的用户出现问题,并且拥有/ jenkins目录 - 具有ID 1001的'jenkins'用户和拥有docker-compose容器的dev-server上的用户('serveradmin'与UID 1000)。但是在构建过程中有'chown -R app'步骤。在这里,Node的模块有什么问题? 请让我知道,如果你需要更多的信息。我会尽量重现/回滚到明天的错误,而我们还没有很多的构建。 – setevoy