gpt4 book ai didi

通过命令行设置 docker-compose env 文件

转载 作者:行者123 更新时间:2023-12-02 02:15:04 25 4
gpt4 key购买 nike

所以我想使用自定义环境文件取决于通过命令行传递的自定义环境变量。

假设我使用 docker-compose run 命令开始撰写:

docker-compose run -e ENVIROMENT=local spring-app

然后我想在基于环境变量的 docker-compose.yml 文件中使用我的自定义 .env

version: '2.1'
services:

spring-app:
build: .
depends_on:
docker-mariadb:
condition: service_healthy
links:
- docker-mariadb
ports:
- 8080:8080
environment:
- SPRING_PROFILES_ACTIVE
- DATABASE_HOST
- DATABASE_USER
- DATABASE_PASSWORD
- DATABASE_NAME
- DATABASE_PORT
env_file:
- ${ENVIROMENT}.env

docker-mariadb:
image: mariadb:latest
restart: always
environment:
- MYSQL_ROOT_PASSWORD=${DATABASE_PASSWORD}
- MYSQL_DATABASE=${DATABASE_NAME}
- MYSQL_PASSWORD=${DATABASE_PASSWORD}
healthcheck:
test: "/usr/bin/mysql --user=${DATABASE_USER} --password=${DATABASE_PASSWORD} --execute \"SHOW DATABASES;\""
interval: 30s
timeout: 10s
retries: 5
env_file:
- ${ENVIROMENT}.env

我的docker文件:

FROM openjdk:10-jre-slim
VOLUME /tmp
ARG JAR_FILE="build/libs/spring-app-0.0.1-SNAPSHOT.jar"
COPY ${JAR_FILE} spring-app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/spring-app.jar"]

本地.env:

SPRING_PROFILES_ACTIVE=prod
DATABASE_HOST=docker-mariadb
DATABASE_USER=root
DATABASE_PASSWORD=xxx
DATABASE_NAME=xxx
DATABASE_PORT=3306

当我运行此命令时,我的自定义环境变量似乎未设置,并且 docker 仍想使用默认的 .env 文件。这是我的错误:

❯ docker-compose run -e ENVIROMENT=local spring-app
WARNING: The ENVIROMENT variable is not set. Defaulting to a blank string.
WARNING: The DATABASE_PASSWORD variable is not set. Defaulting to a blank string.
WARNING: The DATABASE_NAME variable is not set. Defaulting to a blank string.
WARNING: The DATABASE_USER variable is not set. Defaulting to a blank string.
ERROR: Couldn't find env file: /Users/user/Desktop/docker-example/.env

最佳答案

-e 标志旨在将环境变量传递到容器。在docker run命令之前添加您的环境,将环境变量分配给docker引擎,以便可以完成环境变量插值

docker-compose run -e ENVIROMENT=local spring-app
[...]
ERROR: Couldn't find env file: /Users/sabhat/code/scratch/.env
<小时/>
ENVIROMENT=local docker-compose run spring-app
[...]
Starting scratch_docker-mariadb_1

顺便说一句,希望您知道 docker-compose run 的含义是 run a one-time command for a service - 它不映射端口,并且还会覆盖服务中定义的运行命令。您应该使用docker-compose up调出整组容器

关于通过命令行设置 docker-compose env 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51974044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com