【问题标题】:docker-compose environment variables inside containerdocker-compose 容器内的环境变量
【发布时间】:2020-09-25 09:46:16
【问题描述】:

我有一个使用 docker 容器开发的小型 python 应用程序。

我的设置是:

Dockerfile

FROM python:3

ARG http_proxy
ARG https_proxy

ENV http_proxy ${http_proxy}
ENV https_proxy ${https_proxy}
ENV VIRTUAL_ENV=/opt/venv
ENV PATH="$VIRTUAL_ENV/bin:$PATH"

RUN apt-get update
RUN apt install -y vim screen
RUN \
    echo 'alias py="/opt/venv/bin/python"' >> /root/.bashrc && \
    echo 'alias ls="ls --color=auto"' >> /root/.bashrc && \
    echo 'PS1="\u@\h:\[\e[33m\]\w\[\e[0m\]\$ "' >> /root/.bashrc
RUN python3 -m venv $VIRTUAL_ENV
WORKDIR /app   
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

docker-compose.yml

version: '3.8'

x-dev:
    &proxy_conf
    http_proxy: "${HTTP_PROXY}"
    https_proxy: "${HTTPS_PROXY}"
services:
    py_service:
        container_name: ${APP_NAME}
        build:
            context: .
            dockerfile: Dockerfile
            args: *proxy_conf
        image: ${APP_NAME}_img
        volumes:
        - '.:/app'
        restart: always
        command: tail -f /dev/null

.env

HTTP_PROXY=<http_proxy_server_here>
HTTPS_PROXY=<https_proxy_server_here>
APP_NAME=python_app

问题是,如果代理服务器发生了变化,我需要重建映像,而我不希望这样做(最后结果也许我会这样做)。

我想要做的是更改容器内的代理环境变量,但我没有找到存储 env 的文件。

容器操作系统版本为:

[root@5b1b77079e10 ~ >>>] $ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

【问题讨论】:

    标签: docker-compose environment-variables dockerfile


    【解决方案1】:

    您应该只需要重新创建容器,而不需要重新构建映像。我假设你正在做这样的事情来开始一切:

    1. docker-compose build
    2. docker-compose up -d

    然后我假设您正在更新您的 .env 文件,一旦您这样做了,您应该能够为您的容器执行以下操作以获取更改:

    1. docker-compose down
    2. docker-compose up -d

    您不需要再次发送docker-compose build

    【讨论】:

    • 你甚至不需要docker-compose downdocker-compose up -d 就够了,compose 脚本会检测变化并重新创建容器。
    • 但是 proxy_server 存储在 .env 文件中,并且 docker-compose up -d docker 将重新创建图像,因为有些东西发生了变化。我是对的?
    • 不,docker-compose up -d 只会重新创建容器而不是图像。
    • 除了重新创建容器之外我没有其他解决方案?我知道 docker 上的临时容器的概念,但我想知道环境变量在容器内的存储位置。
    • 假设我们谈论的是 Linux 容器,那么这是一个 linux 问题而不是真正的 docker 问题,但据此它们存储在 /proc/1/environ:forums.docker.com/t/where-are-stored-the-environment-variables/…
    猜你喜欢
    • 1970-01-01
    • 2020-02-23
    • 2015-06-17
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    相关资源
    最近更新 更多