【发布时间】:2019-02-20 22:44:15
【问题描述】:
Docker 新手,所以我可能遗漏了一些明显的东西......
我有一个应用程序分为 Web 客户端和后端服务器。后端很容易通过 Dockerfile 创建映像:
-
COPY源 -
RUNnpm install,npm run build -
CMDnpm run start
然后,已构建的后端应用程序将在运行时访问环境变量。
使用 web 客户端就没有那么简单了,因为 webpack 需要在构建应用程序之前 拥有环境变量。据我所知,这让我只有两个选择:
- 要求用户从应用源构建自己的镜像
- 通过在
CMD中运行npm run build在container run上构建Web 客户端
目前我正在执行#2,但这两个选项对我来说似乎都是错误的。最好的解决方案是什么?
FROM node:latest
COPY ./server /app/server
COPY ./web /app/web
WORKDIR /app/web
CMD ["sh", "-c", "npm install && npm run build && cd ../server && npm install && npm run build && npm run start"]
【问题讨论】:
-
您可以指示他们在新的 Dockerfile 中使用
FROM和ENV并在原始容器中使用ONBUILD来进行构建。 -
您能否发布您目前为 Web 客户端提供的 Dockerfile,以便我们查看需要在何处使用变量?
-
@JackGore 这些变量与 Dockerfile 本身并不真正相关,但 webpack 配置需要它们来设置
process.env。只有NODE_ENV直接在 webpack 配置中使用,其余的 API URL 或应用名称也设置为process.env并稍后在应用本身中使用。 -
@ferrix 我想我可以,但我试图阻止最终用户需要构建自己的图像并坚持只使用轻型配置运行我的图像,但似乎这没什么大不了的这就是 Docker 通常处理事情的方式。
-
@JackGore 我更新了我的帖子。目前客户端和服务器都在同一个图像中,刚刚用于测试。专注于 Web 部件,因为我已经知道为服务器处理此问题的正确方法。如您所见,
CMD行非常可怕,当服务器使用自己的正确RUN语句和简单的CMD ["npm", "run", "start"]放入自己的映像时,它只会稍微好一点。目前在docker container run期间提供所有环境变量。
标签: docker webpack environment-variables