Docker Compose в Windows 10 Home не может найти файлы - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь научить Docker и Docker Compose настроить небольшой пример узла / экспресс-сервера. Я использую панель инструментов Docker на Windows 10 Home. Ниже приведена структура моего проекта

root/ 
   docker-compose.yml
   Dockerfile
   index.js
   package.json

Это мой Dockerfile

FROM node:8

WORKDIR /usr/app

COPY . .
RUN npm install --quiet

Это мой докер-compose.yml

version: "2"
services:
  node:
    build: .
    working_dir: /usr/app
    environment:
      - NODE_ENV=production
    expose:
      - "3000:3000"
    command: "node index.js"

Это мой пакет. Json

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.16.4"
  }
}

а это мой index.js

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

Я смешал различные примеры, найденные в документах для каждого из компонентов. Но я не мог заставить его бежать. Когда я делаю docker-compose up, я получаю следующее:

$ docker-compose up
Building node
Step 1/5 : FROM node:8
8: Pulling from library/node
61be48634cb9: Pull complete
fa696905a590: Pull complete
b6dd2322bbef: Pull complete
32477089adb4: Pull complete
febe7209ec28: Pull complete
4364cbe57162: Pull complete
ace5c680ff94: Pull complete
4acd6a9b7a48: Pull complete
Digest: sha256:7b65413af120ec5328077775022c78101f103258a1876ec2f83890bce416e896
Status: Downloaded newer image for node:8
 ---> 82c0936c46c1
Step 2/5 : WORKDIR /usr/app
 ---> Running in 454ed6735e6e
Removing intermediate container 454ed6735e6e
 ---> 62d35be2db4c
Step 3/5 : COPY package.json .
 ---> fdbb25021d83
Step 4/5 : RUN npm install --quiet
 ---> Running in e535ef0bc18f
npm WARN test@1.0.0 No description
npm WARN test@1.0.0 No repository field.

added 48 packages from 36 contributors and audited 121 packages in 3.179s
found 0 vulnerabilities

Removing intermediate container e535ef0bc18f
 ---> 1a61e872c386
Step 5/5 : COPY . .
 ---> 56e765cf1c3c
Successfully built 56e765cf1c3c
Successfully tagged root_node:latest
WARNING: Image for service node was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating root_node_1 ... done
Attaching to root_node_1
node_1  | module.js:550
node_1  |     throw err;
node_1  |     ^
node_1  |
node_1  | Error: Cannot find module '/usr/app/index.js'
node_1  |     at Function.Module._resolveFilename (module.js:548:15)
node_1  |     at Function.Module._load (module.js:475:25)
node_1  |     at Function.Module.runMain (module.js:694:10)
node_1  |     at startup (bootstrap_node.js:204:16)
node_1  |     at bootstrap_node.js:625:3
root_node_1 exited with code 1

Я столкнулся с тем, что мне не удалось найти что-то, связанное с Windows и правами доступа к файлам, но я не смог найти ничего более подробного по этому поводу.

EDIT 1: я удалил том из docker-compose.yml, и он отлично работает, когда я работаю с Docker CE для MacOS. То же самое не может найти index.js в Windows с помощью инструментов Docker

1 Ответ

0 голосов
/ 04 ноября 2018

Не могли бы вы попробовать ниже.

В вашем index.js порт выставления равен 3000, поэтому мы будем выставлять то же самое в DockerFile.

В docker-compose.yml выполняется сопоставление портов от 5000 до 3000. Где 5000 будет хост (Windows) и 3000 клиент (Linux).

Dockerfile:

FROM node:8

WORKDIR /usr/app

COPY package.json .
RUN npm install --quiet

COPY . . 
EXPOSE 3000
CMD [ "npm", "start" ]

докер-compose.yml

version: '3'
services:
  web:
    build: .
    ports:
     - "5000:3000"
...