Ошибка: EACCESS: в доступе отказано, откройте «build / FILENAME.js» - PullRequest
0 голосов
/ 19 июня 2019

Docker-контейнер не запускается.Получил следующее сообщение об ошибке

Я ранее пытался установить build на 777, но ничего не изменилось.

package.json

"scripts": {
    "start": "nodemon --exec babel-node src/main.js",
    "build": "babel src --out-dir build",
    ...

logs

$ babel src --out-dir build
dispatcher_1   | { Error: EACCES: permission denied, open 'build/CalcUtil.js'
dispatcher_1   |     at Object.openSync (fs.js:439:3)
dispatcher_1   |     at Object.writeFileSync (fs.js:1190:35)
dispatcher_1   |     at outputFileSync (/app/node_modules/output-file-sync/index.js:115:5)
dispatcher_1   |     at /app/node_modules/@babel/cli/lib/babel/dir.js:117:41
dispatcher_1   |     at Generator.next (<anonymous>)
dispatcher_1   |     at asyncGeneratorStep (/app/node_modules/@babel/cli/lib/babel/dir.js:74:103)
dispatcher_1   |     at _next (/app/node_modules/@babel/cli/lib/babel/dir.js:76:194)
dispatcher_1   |   errno: -13,
dispatcher_1   |   syscall: 'open',
dispatcher_1   |   code: 'EACCES',
dispatcher_1   |   path: 'build/CalcUtil.js' }

docker-compose.yml

version: '3.1'

volumes:
  db:

services:
  mongodb:
    image: mongo:4.0-xenial
    restart: always
    volumes:
      - db:/data/db

  mongoclient:
    image: mongoclient/mongoclient
    restart: always
    volumes:
      - db:/data/db
    environment:
      - MONGO_URL=mongodb://mongodb/data
      - MONGOCLIENT_DEFAULT_CONNECTION_URL=mongodb://mongodb/data
    ports:
      - "8071:3000"
    depends_on:
      - mongodb

  dispatcher:
    image: node:10
    restart: always
    volumes:
      - ./tmp:/upload_tmp
      - ./:/app
    working_dir: /app
    ports:
      - "8070:8070"
    command: "make build start"
    user: "1000:1000"
    depends_on:
      - mongodb

Для запуска док-контейнера я использую docker-compose up -d

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Полагаю, я также сделаю комментарий официальным ответом

Итак, в файле docker-compose.yml вы определили, что хотите запустить диспетчер служб как user: "1000:1000", но когда у вас естьподключил том, владельцем которого на самом деле является root:root.

Я считаю, что это специфическая проблема Linux с разрешениями при подключении томов, поскольку владелец становится пользователем, которому принадлежит демон докера (по крайней мере, я сталкивался с этимнесколько раз)

Эта проблема не возникает в Docker Desktop для Mac, насколько я знаю, и тома монтируются с указанным пользователем в качестве владельца.

Поэтому удаление определения пользователя дляэта служба решит проблему.

0 голосов
/ 19 июня 2019

Ошибка сообщает, что скрипт пытается открыть файл и не имеет разрешения на открытие этого файла.

Учитывая, что рассматриваемый файл находится в каталоге build, а также сведения из трассировки стека, я предполагаю, что ваш скрипт пытается записать в этот файл.

Наиболее вероятный сценарий здесь заключается в том, что в вашем контейнере нет каталога build, и вы не написали никакого кода для создания каталога build. Поскольку вы используете make для управления сборкой, а вы не включили Makefile, это трудно понять наверняка.

Взгляните на ваши файлы сборки и убедитесь, что вывод напрямую создан (если он отсутствует). Вы также, вероятно, захотите убедиться, что его содержимое очищено всякий раз, когда вы запускаете полную сборку.

...