繁体   English   中英

Angular Docker 组合取决于 env

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM