Передача переменных ENV не работает с docker-compose - PullRequest
0 голосов
/ 03 июня 2019

Я борюсь с передачей переменных ENV с помощью docker-compose

У меня есть Dockerfile для сборки контейнера с помощью приложения Java:

FROM alpine:latest

ENV ftp_ip 127.0.0.1
ENV mongo_ip 127.0.0.1
ENV quorum_ip http://localhost:22000

RUN apk add --update openjdk8 && mkdir /var/backend/
RUN apk update
COPY license-system-0.0.1-SNAPSHOT.jar /var/backend/
EXPOSE 8080
ENTRYPOINT [ "java", "-jar", "-Dspring.quorum.host=${quorum_ip}", "-Dspring.ftp.server=${ftp_ip}", "-Dspring.data.mongodb.host=${mongo_ip}","/var/backend/license-system-0.0.1-SNAPSHOT.jar" ]

Затем, файл компоновки docker:

version: "3"
services:
  backend:
    network_mode: host
    build: backend
    ports:
      - "8080:8080"
    environment:
      - mongo_ip=${mongo_ip}
      - ftp_ip=${ftp_ip}
      - quorum_ip=${quorum_ip}

Наконец, контейнер запускается командой bash:

quorum_ip="$1" mongo_ip="$2" ftp_ip="$3" docker-compose up -d --build

, но docker inspect не показывает ничего многообещающего.Переменные не установлены должным образом (они используют значения по умолчанию из dockerfile), а параметры не изменяются даже на значения по умолчанию ...

        "Env": [
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "ftp_ip=127.0.0.1",
            "mongo_ip=127.0.0.1",
            "quorum_ip=http://localhost:22000"
        ],
        "Cmd": null,
        "ArgsEscaped": true,
        "Image": "sha256:3ce51f52d70127f22462eafdb60321a4e477a4bec5aa092e860b8485e8575c26",
        "Volumes": null,
        "WorkingDir": "",
        "Entrypoint": [
            "java",
            "-jar",
            "-Dspring.quorum.host=${quorum_ip}",
            "-Dspring.ftp.server=${ftp_ip}",
            "-Dspring.data.mongodb.host=${mongo_ip}",
            "/var/backend/license-system-0.0.1-SNAPSHOT.jar"
        ]

Я что-то упустил?Или я что-то не так делаю?

Ответы [ 2 ]

1 голос
/ 03 июня 2019

Если вы хотите использовать переменные environmentmnet в вашей точке входа, вы должны использовать «форму оболочки» вместо «формы exec».

ENTRYPOINT java -jar -Dspring.quorum.host=${quorum_ip} -Dspring.ftp.server=${ftp_ip} -Dspring.data.mongodb.host=${mongo_ip} /var/backend/license-system-0.0.1-SNAPSHOT.jar

Возможно, вы могли бы заставить ее работать с формой «exec»"но это только усложняет синтаксис.

0 голосов
/ 03 июня 2019

Вы должны использовать аргументы сборки вместо envs для создания образа из Dockerfile

Dockerfile

FROM alpine:latest

ARG ftp_ip
ARG mongo_ip
ARG quorum_ip

RUN apk add --update openjdk8 && mkdir /var/backend/
RUN apk update
COPY license-system-0.0.1-SNAPSHOT.jar /var/backend/
EXPOSE 8080
ENTRYPOINT [ "java", "-jar", "-Dspring.quorum.host="${quorum_ip}, "-Dspring.ftp.server="${ftp_ip}, "-Dspring.data.mongodb.host="${mongo_ip},"/var/backend/license-system-0.0.1-SNAPSHOT.jar" ]

docker-compose

version: "3"
services:
  backend:
    network_mode: host
    build:
      context: .
      dockerfile: ./path/to/backend/Dockerfile
      args:
        - mongo_ip=${mongo_ip}
        - ftp_ip=${ftp_ip}
        - quorum_ip=${quorum_ip}
    ports:
      - "8080:8080"

.env (Дляпередать envs для использования в docker-compose. docker-compose автоматически извлекает envs из файла .env, если он существует)

ftp_ip=127.0.0.1
mongo_ip=127.0.0.1
quorum_ip=http://localhost:22000

и затем запускает сборку docker-compose для создания образа с правильными envs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...