[英]Angular Docker compose depending on env
我想要一个带有参数的docker-compose
命令,该命令指示应该运行哪个npm
脚本。 例如,当我想构建一个 prod 版本时,它应该运行npm run build:prod
,当 dev npm run build:dev
。
所以我准备了一个docker-compose
文件:
version: "3"
services:
customer-support-portal:
image: "customer-support-portal"
container_name: "customer-support-portal"
build: .
ports:
- "3000:80"
volumes:
- "/usr/src/app/node_modules"
- ".:/usr/src/app"
和Dockerfile
:
ARG env="dev"
### STAGE 1: Build ###
FROM node:10-alpine as build-step
WORKDIR /usr/src/app
COPY package.json ./
RUN npm install
COPY . .
RUN npm run build:${env}
### STAGE 2: Setup ###
FROM nginx:alpine
COPY --from=build-step /usr/src/app/dist/customer-support-portal /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
所以正如你所看到的,我试图以某种方式设置一个名为env
(默认dev
)的变量,它指示应该运行哪个构建。 但是我想在调用docker-compose up -d
时传递该参数,以便它将使用我想要的配置文件(dev/prod)启动应用程序。
您可以使用--build-arg
标志通过docker-compose build
命令传递构建参数。 这似乎并没有被集成到docker-compose up --build
...
docker-compose build --build-arg=env=prod
这将按照您的预期传递到 docker build。 为了让它按预期工作(也使用普通的 docker docker build
命令)你的 Dockerfile 需要一个小的修改。 ARG
指令的位置与可以使用该值的位置有关。
在FROM
之前使用ARG
不是特定构建阶段的一部分,并且允许为FROM
指令传递参数。 这通常用于指定要使用的基本映像的版本。 如果您想在任何其他指令中使用 arg,则ARG
指令必须在FROM
。 然而,这会导致参数在FROM
指令中不可用 - 这对您的用例来说很好。
有关详细信息,请在此处查看docker 文档或在 github 上查看此讨论。
docker-compose 构建示例
文件
FROM alpine:3.12.1
ARG argument="defaultvalue"
RUN echo passed argument \"$argument\"
docker-compose.yml
version: "3.8"
services:
myalpine:
build: .
命令
docker-compose build --build-arg=argument=compose-cmdline
结果是
Step 3/3 : RUN echo passed argument [$argument]
---> Running in 3b58453c3b83
passed argument [compose-cmdline]
通过环境变量控制构建参数的示例
您还可以使用 docker-compose 文件从环境变量中设置 build-args 而不是--build-arg
标志,该标志仅在docker-compose build
期间可用,但不适用于docker-compose up
。
docker-compose.yml
version: "3.8"
services:
myalpine:
build:
context: .
args:
argument: $SOMEENV
并运行它
SOMEENV=envarg docker-compose up --build
这会构建您的图像,在常规docker-compose up
期间传递 env var 的值作为构建参数。 请注意,此 env 变量在容器运行时也可用,因此您需要确保不会与执行期间所需的 env 变量发生冲突。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.