Dockerfile如何设置?

时间:2018-10-09 08:50:02

标签: reactjs docker continuous-integration cd continuous

我正在与docker一起练习创建具有持续交付功能的应用程序。我似乎找不到正确的定义来存储命令。

这是我的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:/驱动器上

RUN :好的,这将安装软件包依赖项。

COPY :另一个副本,这是我将应用程序路径复制到容器的位置吗?

CMD :据我了解,这可以运行应用程序index.js;再次,我应该定义绝对路径吗?


摘要

我想将我的react应用程序泊坞窗化,例如在以下路径中:D:// storage / application

这是我的React应用程序的文件结构:

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

现在在这种情况下我应该如何定义Dockerfile?我看到所有带有相对路径的dockerfile,该怎么办? 因为上面的dockerfile有错误:

  

D:\ storage \ application>泊坞窗   运行-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

在IgnacioMillán解决方案之后更新

  

存储\应用程序> docker   运行-p 3000:3002码头

/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 :(得分:0)

您从node index.js运行WORKDIR,因此从/app运行。但是/app中没有index.js文件。它位于/app/src中。

您可以像这样CMD node src/index.js更改CMD,也可以通过npm run或类似的方式启动应用。

请注意,Docker容器内的文件系统与Windows文件系统是隔离的。因此,Docker不必了解Windows上的C:/ D:驱动器

答案 1 :(得分:0)

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便不依赖于文件树。