В Docker нет такого файла или каталога, откройте ‘/home/todo1/server/package.json’ (обновлено 09:47:44 UTC суббота, 2 января 2021)

#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: