I'm new to Docker, and I've wanted try Dockerizing my node app.
I've tried following the directions on nodejs.org, but I've been getting errors on npm install
.
Here is my Dockerfile:
# Use the latest 'node' official version
FROM node:current
# Set working directory to /usr/src/app
WORKDIR /usr/src/app
# Copy package.json, package-lock.json
COPY package*.json ./
# Install dependencies
RUN npm install
# Copy all remaining files from the current directory
# Note: 'node_modules' will not be overwritten because of .dockerignore
# See: .dockerignore for the full list of ignored files
COPY . .
EXPOSE 3031
# Start the container using the server:watch command
CMD ["npm", "start"]
Here are the errors I've been receiving:
server$ docker build -t test .
Sending build context to Docker daemon 1.716MB
Step 1/8 : FROM node:current
---> b6f455933a97
Step 2/8 : WORKDIR /usr/src/app
---> Running in fbc7ef703e8f
Removing intermediate container fbc7ef703e8f
---> 18682f683fa1
Step 3/8 : COPY package*.json ./
---> 6f8ab073929f
Step 4/8 : RUN npm install
---> Running in 3105e1f65514
npm WARN tarball tarball data for @babel/[email protected] (sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==) seems to be corrupted. Trying one more time.
npm WARN tarball tarball data for [email protected] (sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=) seems to be corrupted. Trying one more time.
npm WARN tarball tarball data for [email protected] (sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=) seems to be corrupted. Trying one more time.
npm WARN tarball tarball data for [email protected] (sha512-9nLya8GBtlFmmFMW7oXXwoXS1NkrccqTqAtwXzdPV9e2mqSEvCki6iHL/Fbzi5oqbugshzgGPk7KBb2qNP1DSA==) seems to be corrupted. Trying one more time.
npm WARN tarball tarball data for [email protected] (sha512-g0n4nH1ONGvqYo1v72uSWvF/MRNnnq1LzmSzXb/6EPF3LFb51akOhgG3K2+aETAsJx90/Q5eFNTntu4vBCwyQQ==) seems to be corrupted. Trying one more time.
npm WARN tarball tarball data for @babel/[email protected] (sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==) seems to be corrupted. Trying one more time.
npm WARN tar ENOENT: no such file or directory, open '/usr/src/app/node_modules/.staging/@graphql-toolkit/schema-merging-eb6c200d/index.esm.js'
npm WARN tar ENOENT: no such file or directory, open '/usr/src/app/node_modules/.staging/@graphql-toolkit/core-0eb20c1b/index.esm.js'
npm WARN tar ENOENT: no such file or directory, open '/usr/src/app/node_modules/.staging/@types/node-66ad0ba4/https.d.ts'
npm WARN tar ENOENT: no such file or directory, open '/usr/src/app/node_modules/.staging/@graphql-toolkit/schema-merging-05667067/index.esm.js'
...
...
...
npm WARN tar ENOENT: no such file or directory, open '/usr/src/app/node_modules/.staging/apollo-language-server-f6cf3e14/lib/engine/GraphQLDataSource.d.ts'
npm WARN tar ENOENT: no such file or directory, open '/usr/src/app/node_modules/.staging/apollo-language-server-f6cf3e14/lib/graphqlTypes.d.ts'
npm WARN tar ENOENT: no such file or directory, open '/usr/src/app/node_modules/.staging/serverless-146aad15/lib/plugins/create/templates/aws-clojure-gradle/gradlew'
npm WARN [email protected] No repository field.
npm ERR! Maximum call stack size exceeded
npm WARN tarball tarball data for [email protected] (sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=) seems to be corrupted. Trying one more time.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2020-02-10T10_05_40_789Z-debug.log
The command '/bin/sh -c npm install' returned a non-zero code: 1
Additional information:
npm ERR! code EINTEGRITY
.npm WARN
.Please help.
Edit:
An example of the npm ERR! code EINTEGRITY
error that I recieve.
npm WARN tar ENOENT: no such file or directory, open '/home/node/node_modules/.staging/@storybook/core-bb4e5c86/dll/storybook_ui-manifest.json'
npm WARN [email protected] No repository field.
npm ERR! code EINTEGRITY
npm ERR! Verification failed while extracting [email protected]:
npm ERR! Verification failed while extracting [email protected]:
npm ERR! sha512-jJfE/DW6tIK1Ek8nCfNFqt8Wb3nzMoAbocBF6/Icgg1ZFSBpObdnwVY2jQj6qUqzhx5jc71fpvBWyLGO7Xl+nQ== integrity checksum failed when using sha512: wanted sha512-jJfE/DW6tIK1Ek8nCfNFqt8Wb3nzMoAbocBF6/Icgg1ZFSBpObdnwVY2jQj6qUqzhx5jc71fpvBWyLGO7Xl+nQ== but got sha512-jbNiuTRS00nR58EcP7CCq2ld+M2yyKOEkKI0NwbUVCPecBmMiR8MFA7D7h/qKBzL+7DnmbZaNdPQr7DxIMGyoQ==. (69097 bytes)
Edit#2 An example of the output when I npm install after removing package-lock.json (hangs indefinitely at the end).
$ npm install
npm WARN deprecated [email protected]: TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.
npm WARN deprecated [email protected]: The 'apollo-codegen' command has been replaced with the more-powerful 'apollo' CLI. Switch to 'apollo' to ensure future updates and visit https://npm.im/apollo#code-generation for more information.
npm WARN deprecated [email protected]: You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1
npm WARN deprecated [email protected]: core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.
npm WARN deprecated @types/[email protected]: This is a stub types definition. get-port provides its own type definitions, so you do not need this installed.
npm WARN deprecated [email protected]: Please note that v5.0.1+ of superagent removes User-Agent header by default, therefore you may need to add it yourself (e.g. GitHub blocks requests without a User-Agent header). This notice will go away with v5.0.2+ once it is released.
npm WARN deprecated @types/[email protected]: This is a stub types definition. vfile-message provides its own type definitions, so you do not need this installed.
npm WARN deprecated [email protected]: use String.prototype.padStart()
npm WARN tarball tarball data for validator@^12.2.0 (sha512-jJfE/DW6tIK1Ek8nCfNFqt8Wb3nzMoAbocBF6/Icgg1ZFSBpObdnwVY2jQj6qUqzhx5jc71fpvBWyLGO7Xl+nQ==) seems to be corrupted. Trying one more time.
npm WARN tarball tarball data for typescript@^3.7.5 (sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==) seems to be corrupted. Trying one more time.
npm WARN tarball tarball data for yargs@^15.0.0 (sha512-T39FNN1b6hCW4SOIk1XyTOWxtXdcen0t+XYrysQmChzSipvhBO8Bj0nK1ozAasdk24dNWuMZvr4k24nz+8HHLg==) seems to be corrupted. Trying one more time.
npm WARN tarball tarball data for web-resource-inliner@^4.3.3 (sha512-agVAgRhOOi4GVlvKK34oM23tDgH8390HfLnZY2HZl8OFBwKNvUJkH7t89AT2iluQP8w9VHAAKX6Z8EN7/9tqKA==) seems to be corrupted. Trying one more time.
npm WARN tarball tarball data for refractor@^2.4.1 (sha512-Xh9o7hQiQlDbxo5/XkOX6H+x/q8rmlmZKr97Ie1Q8ZM32IRRd3B/UxuA/yXDW79DBSXGWxm2yRTbcTVmAciJRw==) seems to be corrupted. Trying one more time.
[ ......] | extract:@types/history: sill extract @types/history@* extracted to /home/node/node_modules/.staging/@types/history-677b6da5 (5080ms)
Edit#3 Pasting my package.json here (excluding scripts, description and author). There is no custom npm install or postinstall script.
{
"name": "server",
"version": "0.0.2",
"main": "handler.js",
"dependencies": {
"@koa/router": "^8.0.7",
"@types/aws-lambda": "^8.10.40",
"@types/base64-url": "^2.2.0",
"@types/bcryptjs": "^2.4.2",
"@types/graphql-depth-limit": "^1.1.2",
"@types/jsonwebtoken": "^8.3.7",
"@types/koa": "^2.11.0",
"@types/koa-bodyparser": "^4.3.0",
"@types/koa-logger": "^3.1.1",
"@types/koa-passport": "^4.0.2",
"@types/koa__router": "^8.0.2",
"@types/lodash": "^4.14.149",
"@types/mongodb": "^3.3.15",
"@types/mongoose": "^5.7.0",
"@types/node": "^13.7.0",
"@types/nodemailer": "^6.4.0",
"@types/object-hash": "^1.3.1",
"@types/passport": "^1.0.2",
"@types/passport-local": "^1.0.33",
"@types/react": "^16.9.19",
"@types/react-dom": "^16.9.5",
"@types/redis": "^2.8.14",
"@types/validator": "^12.0.1",
"apollo-server-cache-redis": "^1.1.5",
"apollo-server-koa": "^2.10.0",
"base64-url": "^2.3.3",
"bcryptjs": "^2.4.3",
"can-error": "^0.2.0",
"classnames": "^2.2.6",
"dataloader": "^2.0.0",
"dotenv": "^8.2.0",
"graphql": "^14.6.0",
"graphql-depth-limit": "^1.1.0",
"graphql-middleware": "^4.0.2",
"graphql-query-complexity": "^0.4.1",
"graphql-rate-limit": "^2.0.1",
"graphql-scalars": "^1.0.6",
"graphql-shield": "^7.0.10",
"graphql-tools": "^4.0.6",
"http-status-codes": "^1.4.0",
"iexcloud_api_wrapper": "^1.1.5",
"jsonschema": "^1.2.5",
"jsonwebtoken": "^8.5.1",
"juice": "^6.0.0",
"koa": "^2.11.0",
"koa-bodyparser": "^4.2.1",
"koa-logger": "^3.2.1",
"koa-passport": "^4.1.3",
"lodash": "^4.17.15",
"moment": "^2.24.0",
"mongodb-memory-server": "^6.2.4",
"mongoose": "^5.8.11",
"nodemailer": "^6.4.2",
"object-hash": "^2.0.1",
"passport-local": "^1.0.0",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-jss": "^10.0.4",
"redis": "^2.8.0",
"saslprep": "^1.0.3",
"serverless-http": "^2.3.1",
"source-map-support": "^0.5.16",
"typescript": "^3.7.5",
"validator": "^12.2.0",
"winston": "^3.2.1"
},
"devDependencies": {
"@babel/core": "^7.8.4",
"@babel/preset-env": "^7.8.4",
"@babel/preset-typescript": "^7.8.3",
"@geut/chan": "^2.1.1",
"@graphql-codegen/cli": "^1.12.2",
"@graphql-codegen/typescript": "^1.12.2",
"@storybook/addon-docs": "^5.3.12",
"@storybook/addon-knobs": "^5.3.12",
"@storybook/addon-storyshots": "^5.3.12",
"@storybook/addon-viewport": "^5.3.12",
"@storybook/addons": "^5.3.12",
"@storybook/components": "^5.3.12",
"@storybook/preset-create-react-app": "^1.5.2",
"@storybook/react": "^5.3.12",
"@storybook/theming": "^5.3.12",
"@types/faker": "^4.1.9",
"@types/jest": "^25.1.2",
"@typescript-eslint/eslint-plugin": "^2.19.0",
"@typescript-eslint/eslint-plugin-tslint": "^2.19.0",
"@typescript-eslint/parser": "^2.19.0",
"audit-ci": "^2.4.2",
"aws-lambda": "^1.0.5",
"babel-loader": "^8.0.6",
"babel-plugin-require-context-hook": "^1.0.0",
"customize-cra": "^0.9.1",
"eslint": "^6.8.0",
"eslint-config-prettier": "^6.10.0",
"eslint-config-react": "^1.1.7",
"eslint-config-standard": "^14.1.0",
"eslint-import-resolver-alias": "^1.1.2",
"eslint-plugin-import": "^2.20.1",
"eslint-plugin-mdx": "^1.6.8",
"eslint-plugin-node": "^11.0.0",
"eslint-plugin-prefer-arrow": "^1.1.7",
"eslint-plugin-prettier": "^3.1.2",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-react": "^7.18.3",
"eslint-plugin-standard": "^4.0.1",
"faker": "^4.1.0",
"jest": "^25.1.0",
"jest-transform-graphql": "^2.1.0",
"node-loader": "^0.6.0",
"nodemon": "^2.0.2",
"npm-run-all": "^4.1.5",
"prettier": "^1.19.1",
"react-scripts": "^3.3.1",
"serverless": "^1.63.0",
"serverless-dotenv-plugin": "^2.3.1",
"serverless-offline": "^5.12.1",
"serverless-webpack": "^5.2.0",
"ts-loader": "^6.2.1",
"tsconfig-paths-jest": "0.0.1",
"tslint": "^6.0.0",
"webpack": "^4.41.5",
"webpack-cli": "^3.3.10",
"webpack-graphql-loader": "^1.0.2"
}
}
To better identify the error, you can add a new step in your Dockerfile (before RUN npm install) : Then run your build command again, curl will try to connect to the url and -v flag will output a lot of details, including the tls handshake.
This is a pretty big deal, it seems like it's not possible to create a working docker image of a nodeJS app that contains web3. My app works fine in my local env and as a NPM package but npm install fails in docker. Scrypt is throwing actual errors, not the usual warnings.
npm install always works on my local machine (outside of docker). It only seems to break on Docker. Sometimes, the error ends with npm ERR! code EINTEGRITY.
You can add --pull to the docker build command, it will force docker to get the latest version of your base image : docker build --pull -t myapp . Usefull when you know the base has been updated.
I used to get this error due to low or intermittent internet bandwidth.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With