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

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

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

FROM node:8

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

CMD node index.js

EXPOSE 3000

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

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

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

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

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 с относительными путями, так как я могу это сделать? Потому что вышеупомянутый dockerfile имеет ошибку:

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

Обновление после решения Игнасио Миллана

хранилище \ приложение>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 ответа

Файл 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 и изменить cmd на ["npm", "start"], чтобы Dockerfile не зависел от дерева файлов.

Ты бежишь node index.js от WORKDIRтак что из /app, Но нет файла index.js в /app, Это находится в /app/src,

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

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

Другие вопросы по тегам