【发布时间】:2018-10-09 08:50:02
【问题描述】:
我正在使用 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;我应该再次定义绝对路径吗?
总结
我想 dockerize 我的反应应用程序,例如在这个路径中: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:\存储\应用程序>码头工人 运行 -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 Millán 的解决方案之后更新
存储\应用程序>码头工人 运行 -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
【问题讨论】:
-
看起来像是代码本身的问题。
Cannot find module '/app/index.js'是绝对路径,docker 不会改变它。如果您正确使用了相对路径,它应该可以与 docker 一起使用,因为 »唯一« 的区别是您的应用程序的根目录在 docker 容器内的 »somwhere else« -
但是这个 D 盘不是我的主盘,那么 Docker 怎么知道它必须从 D 盘而不是我的 C 盘运行?
-
Docker 不会从任何驱动器运行,它运行的容器在您的情况下是基于 linux 的。此外,它会挂载卷或将数据复制到这些容器中,为此 docker 需要一个 »context«,默认情况下是当前目录。我猜你从你的项目目录中运行了
docker build或docker run。这就是为什么 docker »知道«所有东西在哪里。
标签: reactjs docker continuous-integration cd continuous