[英]Passing ENV variables does not work with docker-compose
我正在努力使用docker-compose傳遞ENV變量
我有一個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"
]
我錯過了什么嗎? 或者我做錯了什么?
如果要在入口點中使用environmnet varibles,則應使用“shell form”而不是“exec form”。
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表單”,但它只會使語法復雜化。
您必須使用build args而不是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" ]
泊塢窗,撰寫
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會自動從.env文件中獲取envs)
ftp_ip=127.0.0.1
mongo_ip=127.0.0.1
quorum_ip=http://localhost:22000
然后運行docker-compose build以使用正確的envs構建映像
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.