Как настроен Dockerfile? - PullRequest
       33

Как настроен Dockerfile?

0 голосов
/ 09 октября 2018

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

Это мой файл Docker:

FROM node:8

WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app

CMD node index.js

EXPOSE 3000

WORKDIR : это рабочий каталог в контейнере Docker или в моей Windows?

COPY : это должно скопировать приложение в рабочий каталог, как я прочитал.Хорошо, я понимаю, но что для этого нужно?Должен ли я определить свою заявку здесь?Например, на моем диске D: / drive

RUN : Хорошо, это устанавливает зависимости пакета.

COPY : Еще одна копия, это где я копирую путь от моего приложения до контейнера?

CMD : насколько я понимаю, приложение запускается, index.js;снова я должен определить абсолютный путь?


Сводка

Я хочу докеризировать свое приложение реагирования, которое находится, например, по этому пути: D: // storage / application

Это файловая структура моего приложения React:

application
  └─ node_modules
      └─ "some files"
  └─ public
      └─ index.html
  └─ src
      └─ index.js
      └─ app.js
  └─ Dockerfile
  └─ package.json
  └─ package-lock.json

Теперь, как мне определить Dockerfile в этом случае?Я вижу все файлы Docker с относительными путями, так как я могу это сделать?Поскольку в приведенном выше файле Docker есть ошибка:

D: \ storage \ application> docker run -p 3000: 3002 dockertest

module.js:550
throw err;
^ Error: Cannot find module '/app/index.js'
at Function.Module._resolveFilename (module.js:548:15)
at Function.Module._load (module.js:475:25)
at Function.Module.runMain (module.js:694:10)
at startup (bootstrap_node.js:204:16)
at bootstrap_node.js:625:3

Обновление после IgnacioРешение Миллана

хранилище \ приложение> Docker run -p 3000: 3002 dockert

/app/src/index.js:1 (function (exports, require, module, __filename, __dirname) { import React from 'react';

SyntaxError: Unexpected token import
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:617:28)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Function.Module.runMain (module.js:694:10)
    at startup (bootstrap_node.js:204:16)
    at bootstrap_node.js:625:3

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Файл index.js находится в каталоге src, поэтому CMD должен быть узлом src / index.js

FROM node:8

WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app

CMD ["node", "src/index.js"]

EXPOSE 3000

Лучшим подходом является определение стартового скрипта в package.json и изменение cmdto ["npm", "start"], таким образом, файл Docker не зависит от дерева файлов.

0 голосов
/ 09 октября 2018

Вы запускаете node index.js из WORKDIR, поэтому из /app.Но в /app нет файла index.js.Он расположен в /app/src.

Либо вы меняете CMD следующим образом: CMD node src/index.js, либо запускаете свое приложение через npm run или что-то подобное.

Помните, что файловая система внутри вашего контейнера Docker изолирована от вашей Windowsфайловая система.Поэтому Docker не должен ничего знать о вашем диске C: / D: в Windows

...