docker - docker-compose将环境变量传递到容器中可能吗?

标签 docker docker-compose environment-variables arguments devops

docker 确实让我感到困惑。
我正在尝试使用“environments”变量以及.env文件将变量传递到将要创建的容器中。可悲的是没有成功。
我的设置是:
docker-compose.yml

# dockerfile version 3.8 -> 18.07.2020
version: "3.8"

# services basicly means scalable amount of containers
services:

    testalpine:
        image: testenvalpine
        build:
            context: .
            dockerfile: test-dockerfile
            args:
                - DB_NAME=nextcloud
                - DB_USER=nextcloud
        # todo only use https and self sign certificate
        ports:
            - "80:80"
        environment:
            - env1=hello
            - env2=world
        networks:
            - nextcloudnetwork
        # todo include redis and mariadb 
networks:
    nextcloudnetwork:
        # std driver seems to be overlay?
        driver: overlay
Dockerfile:
测试docker文件
FROM alpine:latest
LABEL maintainer="xddq <donthavemyownemailyet:(((>"

ARG DB_NAME=default
ARG DB_USER=default

ENV env1=dockerfile env2=$DB_NAME

ENTRYPOINT [ "sh", "-c", \
    "echo DB_NAME: $DB_NAME DB_USER: $DB_USER env1: $env1 env2: $env2" ]
我的.env文件
DB_NAME=nextcloud
DB_USER=nextcloud
我所做的输出是EXPECT:
DB_NAME:nextcloud DB_USER: nextcloud env1: hello env2:nextcloud 
我得到的输出:
DB_NAME: DB_USER: env1: dockerfile env2: nextcloud
这是否意味着docker-compose中的“.env”和ENV变量对于将要创建的容器内的env变量完全没有用?我的意思是我只能使用ARG变量得到任何结果。 :/
问候

最佳答案

.env不会自动传递到容器,您需要使用env_file: Explaination here在docker-compose.yml中声明它。 dockerfile内的环境应被docker-compose文件中的环境所覆盖,不确定为什么不是这种情况。

关于docker - docker-compose将环境变量传递到容器中可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63642845/

相关文章:

azure - 如何在 Azure 容器应用程序上打开端口

reactjs - 无法构建 react 项目AWS

docker - 偶尔刷新 Flower 数据库和/或从 Docker 中正常退出?

docker - docker compose run 命令中环境变量的使用

django - docker-compose 错误 - 无法读取文件

java - 如何在Tomcat启动时从xml读取环境变量?

objective-c - $PATH 与 Console 和 Cocoa 不同吗?

scala - 将 Lagom Framework 部署为独立的 jar/docker

docker - 如何在junit4/testcontainers中获得@Testcontainers(disabledWithoutDocker = true)行为

docker - 保存 Dockerfile ENV 变量以供将来使用