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