#javascript #node.js #docker #docker-compose
#javascript #node.js #docker #docker-compose
Вопрос:
В чем проблема: без docker как интерфейс, так и серверная часть работают хорошо, но я не вижу ошибки в моих файлах docker. Добавление WORKDIR и команды КОПИРОВАНИЯ не помогло.
Ошибка (docker-compose):
docker-compose up
Starting todo1_postgres_1 ... done
Starting todo1_server_1 ... done
Starting todo1_frontend_1 ... done
Attaching to todo1_postgres_1, todo1_server_1, todo1_frontend_1
postgres_1 |
postgres_1 | PostgreSQL Database directory appears to contain a database; Skipping initialization
postgres_1 |
postgres_1 | 2020-12-30 08:58:59.447 UTC [1] LOG: starting PostgreSQL 13.1 (Debian 13.1-1.pgdg100 1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
postgres_1 | 2020-12-30 08:58:59.447 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
postgres_1 | 2020-12-30 08:58:59.447 UTC [1] LOG: listening on IPv6 address "::", port 5432
server_1 | npm ERR! code ENOENT
server_1 | npm ERR! syscall open
server_1 | npm ERR! path /home/todo1/server/package.json
server_1 | npm ERR! errno -2
server_1 | npm ERR! enoent ENOENT: no such file or directory, open '/home/todo1/server/package.json'
server_1 | npm ERR! enoent This is related to npm not being able to find a file.
server_1 | npm ERR! enoent
server_1 |
server_1 | npm ERR! A complete log of this run can be found in:
server_1 | npm ERR! /root/.npm/_logs/2020-12-30T08_59_00_663Z-debug.log
postgres_1 | 2020-12-30 08:58:59.455 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres_1 | 2020-12-30 08:58:59.464 UTC [26] LOG: database system was shut down at 2020-12-30 08:58:55 UTC
postgres_1 | 2020-12-30 08:58:59.469 UTC [1] LOG: database system is ready to accept connections
todo1_server_1 exited with code 254
frontend_1 | npm ERR! code ENOENT
frontend_1 | npm ERR! syscall open
frontend_1 | npm ERR! path /home/todo1/frontend/package.json
frontend_1 | npm ERR! errno -2
frontend_1 | npm ERR! enoent ENOENT: no such file or directory, open '/home/todo1/frontend/package.json'
frontend_1 | npm ERR! enoent This is related to npm not being able to find a file.
frontend_1 | npm ERR! enoent
frontend_1 |
frontend_1 | npm ERR! A complete log of this run can be found in:
frontend_1 | npm ERR! /root/.npm/_logs/2020-12-30T08_59_01_132Z-debug.log
Структура корневых папок:
Docker-составить текст:
# docker-compose.yml
version: "3.8"
services:
postgres:
image: postgres
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: 1234
ports:
- '5433:5432'
volumes:
- todo1-db:/var/lib/postgresql/data
server:
build:
context: ./server
working_dir: /home/todo1/server
environment: []
depends_on:
- postgres
ports:
- '8000:8000'
frontend:
build:
context: ./frontend
working_dir: /home/todo1/frontend
environment: []
depends_on:
- postgres
- server
ports:
- '8080:8080'
volumes:
todo1-db:
Структура сервера:
Файл докера сервера:
FROM node:12.20.0-alpine3.10
COPY . /home/todo1/server
WORKDIR /home/todo1/server
COPY package.json /home/todo1/server/package.json
RUN npm install
COPY . /home/todo1/server
EXPOSE 8000
CMD [ "npm", "run", "pm2" ]
Создание и запуск сервера без docker-compose:
bpali@DESKTOP-K82QU3Q MINGW64 ~/Desktop/todo1/server (master)
$ docker build ./
#2 [internal] load .dockerignore
#2 sha256:c596b6ad88a0082dfde5453d56e6eb06ca475dc6ae2ecede6a4628803808f4bd
#2 transferring context: 2B 0.0s done
#2 DONE 0.1s
#1 [internal] load build definition from Dockerfile
#1 sha256:840124e5b73821370c0b89331740dfd9c28bac3b30f9401f3af6e045c9d5a1a5
#1 transferring dockerfile: 261B 0.0s done
#1 DONE 0.1s
#3 [internal] load metadata for docker.io/library/node:12.20.0-alpine3.10
#3 sha256:f93a239cf9498b4f2858c5cd1925f0beb10156e2da4ea474d1235c316fd8a2c0
#3 DONE 0.0s
#4 [1/6] FROM docker.io/library/node:12.20.0-alpine3.10
#4 sha256:2736e757d88e7b6a95a1ca1527ac3225d7d74c88565b94f65c841566b70a804b
#4 resolve docker.io/library/node:12.20.0-alpine3.10 done
#4 DONE 0.2s
#5 [internal] load build context
#5 sha256:bb9706b5e026f11c145b8cbf221c3ed23fb9625e339857f75270ffd62cee8c37
#5 transferring context: 12.07MB 4.9s
#5 transferring context: 23.64MB 9.9s
#5 transferring context: 37.77MB 14.9s
#5 transferring context: 40.72MB 16.5s done
#5 DONE 16.7s
#6 [2/6] COPY . /home/todo1/server
#6 sha256:52cd8956e9f29540090c418e1a5aee19738a4e52412e1358e28c5a34a245e0f8
#6 DONE 1.7s
#7 [3/6] WORKDIR /home/todo1/server
#7 sha256:315ab118cb44751256e4b3ad51647c88c0f731ddddc428bbf892a689eca7389a
#7 DONE 0.1s
#8 [4/6] COPY package.json /home/todo1/server/package.json
#8 sha256:3c9b4e205b26c22a538e84e0e2236de50b3e8729d635dec38589c53066c5fc7a
#8 DONE 0.1s
#9 [5/6] RUN npm install
#9 sha256:679b69ed5a5d0ec2de3f023fa481ee44a35f62da208da8a47bb3c2a5e48fcc74
#9 3.410 npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.1.3 (node_modules/fsevents):
#9 3.410 npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
#9 3.410
#9 3.444 audited 449 packages in 2.188s
#9 3.582
#9 3.582 20 packages are looking for funding
#9 3.582 run `npm fund` for details
#9 3.582
#9 3.583 found 5 vulnerabilities (1 low, 1 moderate, 3 high)
#9 3.583 run `npm audit fix` to fix them, or `npm audit` for details
#9 DONE 3.6s
#10 [6/6] COPY . /home/todo1/server
#10 sha256:1a3452b7fdc88b99d49001b64e407ed7cc6ca0c1816b8a0caede57739f962151
#10 DONE 1.3s
#11 exporting to image
#11 sha256:e8c613e07b0b7ff33893b694f7759a10d42e180f2b4dc349fb57dc6b71dcab00
#11 exporting layers
#11 exporting layers 1.2s done
#11 writing image sha256:d4e7b7da23c76baf03370a56bececa4e4ff551931313c115086dad918f8276ce done
#11 DONE 1.2s
bpali@DESKTOP-K82QU3Q MINGW64 ~/Desktop/todo1/server (master)
$ docker run
"docker run" requires at least 1 argument.
See 'docker run --help'.
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Run a command in a new container
bpali@DESKTOP-K82QU3Q MINGW64 ~/Desktop/todo1/server (master)
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> d4e7b7da23c7 About a minute ago 169MB
todo1_frontend latest 908dfa01695c 3 days ago 89.4MB
todo1_server latest 37b664486aef 3 days ago 89.4MB
postgres latest a6cd86e1dfce 3 weeks ago 314MB
node 12.20.0-alpine3.10 1d7da06a260f 5 weeks ago 89.4MB
mysql 5.7 ae0658fdbad5 6 weeks ago 449MB
bpalij/getting-started latest f734b4f3c8a5 6 weeks ago 179MB
getting-started latest f734b4f3c8a5 6 weeks ago 179MB
<none> <none> e036c7b70d0a 6 weeks ago 179MB
docker101tutorial latest ddf08b812293 6 weeks ago 27.2MB
alpine/git latest 76a4083eacef 6 weeks ago 28.4MB
node 12-alpine cd874400360a 6 weeks ago 89.6MB
nicolaka/netshoot latest a3293f8f46ea 2 months ago 347MB
ubuntu latest d70eaf7277ea 2 months ago 72.9MB
bpali@DESKTOP-K82QU3Q MINGW64 ~/Desktop/todo1/server (master)
$ docker run -p 8000:8000 37b664486aef
npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path /package.json
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, open '/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2021-01-02T09_35_22_374Z-debug.log
Запуск сервера без docker после установки npm (интересно правильно):
bpali@DESKTOP-K82QU3Q MINGW64 ~/Desktop/todo1/server (master)
$ npm start
> server@0.0.0 start C:UsersbpaliDesktoptodo1server
> node ./bin/www
Executing (default): SELECT 1 1 AS result
Connection has been established successfully.
Listening on port 8000
Сервер package.json:
{
"name": "server",
"version": "0.0.0",
"private": true,
"scripts": {
"pm2": "pm2 start processes.json --no-daemon",
"start": "node ./bin/www",
"dev": "nodemon ./bin/www"
},
"dependencies": {
"cookie-parser": "~1.4.4",
"cors": "^2.8.5",
"debug": "~2.6.9",
"dotenv": "^8.2.0",
"express": "~4.16.1",
"hbs": "~4.0.4",
"http-errors": "~1.6.3",
"lodash": "^4.17.20",
"morgan": "~1.9.1",
"pg": "^8.5.1",
"pg-hstore": "^2.3.3",
"pm2": "^4.5.1",
"sequelize": "^6.3.5",
"sequelize-pg-utilities": "^2.0.0"
},
"devDependencies": {
"nodemon": "^2.0.6",
"sequelize-cli": "^6.2.0"
}
}
Структура интерфейса:
Интерфейс dockerfile:
FROM node:12.20.0-alpine3.10
COPY . /home/todo1/frontend
WORKDIR /home/todo1/frontend
COPY package.json /home/todo1/frontend/package.json
RUN npm install
COPY . /home/todo1/frontend
EXPOSE 8080
CMD [ "npm", "run", "start" ]
Создание и запуск интерфейса без docker-compose:
bpali@DESKTOP-K82QU3Q MINGW64 ~/Desktop/todo1/frontend (master)
$ docker build ./
#1 [internal] load build definition from Dockerfile
#1 sha256:99e6dfe31e88a5449c8a35b984111bf730682f39deb7cc58beea30ae44586f68
#1 transferring dockerfile: 32B done
#1 DONE 0.0s
#2 [internal] load .dockerignore
#2 sha256:4dfb729897bc9a4e99b1a579d0790deeea87ef1fcf1829ff4108bb736f9657f1
#2 transferring context: 2B done
#2 DONE 0.0s
#3 [internal] load metadata for docker.io/library/node:12.20.0-alpine3.10
#3 sha256:f93a239cf9498b4f2858c5cd1925f0beb10156e2da4ea474d1235c316fd8a2c0
#3 DONE 0.0s
#4 [1/6] FROM docker.io/library/node:12.20.0-alpine3.10
#4 sha256:2736e757d88e7b6a95a1ca1527ac3225d7d74c88565b94f65c841566b70a804b
#4 DONE 0.0s
#5 [internal] load build context
#5 sha256:f449a08f5ba98adb016170ecd0825e21c4f64145b08074dbcc5b75686d7551cd
#5 transferring context: 3.07MB 3.9s done
#5 DONE 4.0s
#9 [5/6] RUN npm install
#9 sha256:2121ea6158fab8c507a8aea9f2e6b30f0f19faf864597d0be49e5c242ff9f8f7
#9 CACHED
#6 [2/6] COPY . /home/todo1/frontend
#6 sha256:6e2212e534823695f8f45dcf54cd257d5a99602cbf969d96d40ea4209e76ca45
#6 CACHED
#7 [3/6] WORKDIR /home/todo1/frontend
#7 sha256:39a1fedee0735e362b04d39e3f3f7740c92535da11a24f1ba4e83ef2dc26ee2b
#7 CACHED
#8 [4/6] COPY package.json /home/todo1/frontend/package.json
#8 sha256:b0c74124e1c6c29787bc2c9752b1663f286732bd69b84b6780e3dbba532ec6cc
#8 CACHED
#10 [6/6] COPY . /home/todo1/frontend
#10 sha256:a8562e4c905779c4b01efeb319d767ec8662d2154136b929f6ae4595245bb723
#10 CACHED
#11 exporting to image
#11 sha256:e8c613e07b0b7ff33893b694f7759a10d42e180f2b4dc349fb57dc6b71dcab00
#11 exporting layers done
#11 writing image sha256:ab656bbf089974e100717f35024e540c097423d8368f0f511c8003042fe4bd38 0.0s done
#11 DONE 0.0s
bpali@DESKTOP-K82QU3Q MINGW64 ~/Desktop/todo1/frontend (master)
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> ab656bbf0899 57 seconds ago 420MB
<none> <none> d4e7b7da23c7 11 minutes ago 169MB
todo1_frontend latest 908dfa01695c 3 days ago 89.4MB
todo1_server latest 37b664486aef 3 days ago 89.4MB
postgres latest a6cd86e1dfce 3 weeks ago 314MB
node 12.20.0-alpine3.10 1d7da06a260f 5 weeks ago 89.4MB
mysql 5.7 ae0658fdbad5 6 weeks ago 449MB
bpalij/getting-started latest f734b4f3c8a5 6 weeks ago 179MB
getting-started latest f734b4f3c8a5 6 weeks ago 179MB
<none> <none> e036c7b70d0a 6 weeks ago 179MB
docker101tutorial latest ddf08b812293 6 weeks ago 27.2MB
alpine/git latest 76a4083eacef 6 weeks ago 28.4MB
node 12-alpine cd874400360a 6 weeks ago 89.6MB
nicolaka/netshoot latest a3293f8f46ea 2 months ago 347MB
ubuntu latest d70eaf7277ea 2 months ago 72.9MB
bpali@DESKTOP-K82QU3Q MINGW64 ~/Desktop/todo1/frontend (master)
$ docker run -p 8080:8080 908dfa01695c
npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path /package.json
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, open '/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2021-01-02T09_43_55_014Z-debug.log
Запуск интерфейса без docker после установки npm (все правильно):
bpali@DESKTOP-K82QU3Q MINGW64 ~/Desktop/todo1/frontend (master)
$ npm start
> frontend@0.1.0 start C:UsersbpaliDesktoptodo1frontend
> react-scripts start
i я╜вwdsя╜г: Project is running at http://172.22.240.1/
i я╜вwdsя╜г: webpack output is served from
i я╜вwdsя╜г: Content not from webpack is served from C:UsersbpaliDesktoptodo1frontendpublic
i я╜вwdsя╜г: 404s will fallback to /
Starting the development server...
Compiled with warnings.
srcApp.js
Line 1:8: 'logo' is defined but never used no-unused-vars
Line 9:3: Nested block is redundant no-lone-blocks
Line 9:3: Unreachable code no-unreachable
srccontainersTodosAppindex.js
Line 8:9: 'getOne' is assigned a value but never used no-unused-vars
Line 8:34: 'patchOne' is assigned a value but never used no-unused-vars
Search for the keywords to learn more about each warning.
To ignore, add // eslint-disable-next-line to the line before.
Интерфейс package.json:
{
"name": "frontend",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.11.6",
"@testing-library/react": "^11.2.2",
"@testing-library/user-event": "^12.6.0",
"axios": "^0.21.1",
"react": "^17.0.1",
"react-dom": "^17.0.1",
"react-scripts": "4.0.1",
"web-vitals": "^0.2.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
Комментарии:
1. определенно ваш файл json не скопирован. используйте dockerfile для создания изображения и опубликуйте ошибку здесь, а не скриншот
2. @NewBee спасибо, сообщение было обновлено, также добавлены журналы запуска интерфейса и серверной части без docker после установки npm, чтобы показать, что это проблема с докером
Ответ №1:
Проблема с копированием package.json решена
server/Dockerfile
FROM node:12.20.0-alpine3.10
RUN mkdir -p /server
WORKDIR /server
COPY . .
RUN npm install
EXPOSE 8000
CMD [ "npm", "run", "pm2" ]
server/processes.json
{
"apps": [
{
"name": "api",
"script": "./bin/www",
"merge_logs": true,
"max_restarts": 20,
"instances": 4,
"max_memory_restart": "200M",
"env": {
"PORT": 8000,
"DEBUG": "server:*",
"NODE_ENV": "development"
}
}
]
}
интерфейс/Dockerfile
FROM node:12.20.0-alpine3.10
RUN mkdir -p /frontend
WORKDIR /frontend
COPY . .
RUN npm install
EXPOSE 8080
CMD [ "npm", "run", "start" ]
docker-compose.yml
# docker-compose.yml
version: "3.8"
services:
postgres:
image: postgres
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: 1234
ports:
- '5433:5432'
volumes:
- todo1-db:/var/lib/postgresql/data
server:
build:
context: ./server
working_dir: /server
environment: []
depends_on:
- postgres
ports:
- '8000:8000'
frontend:
build:
context: ./frontend
working_dir: /frontend
environment: []
depends_on:
- postgres
- server
ports:
- '8080:8080'
volumes:
todo1-db: