Docker 编写传递参数以设置为 Docker 文件的环境变量

Docker compose passing parameters to set as environment variables of Dockerfile

以下是我的Dockerfile

FROM openjdk:11.0.7-jre-slim
ARG HTTP_PORT \
    NODE_NAME \
    DEBUG_PORT \
    JMX_PORT
ENV APP_ROOT=/root \
    HTTP_PORT=$HTTP_PORT \
    NODE_NAME=$NODE_NAME \
    DEBUG_PORT=$DEBUG_PORT \
    JMX_PORT=$JMX_PORT  
ADD spring-boot-app.jar $APP_ROOT/spring-boot-app.jar
ADD Config $APP_ROOT/Config
ADD start.sh $APP_ROOT/start.sh
WORKDIR ${APP_ROOT}
CMD ["/root/start.sh"]

start.sh内容如下:

#!/bin/bash
java -Dnode.name=$NODE_NAME -Dapp.port=$HTTP_PORT -agentlib:jdwp=transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=$JMX_PORT -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar spring-boot-app.jar

我能够 运行 使用具有不同参数的相同图像,如下所示:

docker run -p 9261:9261 -p 65054:65054 -p 8080:8080 -itd --name=app-1 -e HTTP_PORT=8080 -e NODE_NAME=NODE1 -e DEBUG_PORT=9261 -e JMX_PORT=65054 my-image

docker run -p 9221:9221 -p 65354:65354 -p 8180:8180 -itd --name=app-2 -e HTTP_PORT=8180 -e NODE_NAME=NODE2 -e DEBUG_PORT=9221 -e JMX_PORT=65354 my-image

如何使用 docker-compose 实现此目的?我尝试了以下方法,但它不起作用。

version: '3.1'
services:
  app-alpha:
    image: my-image
    environment:
      - HTTP_PORT:8080
      - NODE_NAME:NODE1
      - DEBUG_PORT:9261
      - JMX_PORT:65054
    ports:
      - 9261:9261
      - 65054:65054
      - 8080:8080
  app-beta:
    image: my-image
    environment:
      - HTTP_PORT:8180
      - NODE_NAME:NODE2
      - DEBUG_PORT:9221
      - JMX_PORT:65354
    ports:
      - 9221:9221
      - 65354:65354
      - 8180:8180

= 替换为 : 所以你的变量看起来是:

environment:
      - HTTP_PORT=8080
      - NODE_NAME=NODE1
      - DEBUG_PORT=9261
      - JMX_PORT=65054