首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Docker堆栈条件环境变量

Docker堆栈条件环境变量
EN

Stack Overflow用户
提问于 2021-04-20 23:51:17
回答 1查看 32关注 0票数 0

我有一个docker堆栈文件,它部署在我的群中,群中有许多节点。

由于特定原因,其中一个节点(让我们称其为nodes )可以连接到外部(互联网),而其他节点则没有,因此在其他节点上部署容器时,我需要设置HTTP_PROXY环境变量。

问题是:如何仅在具有特定标签的节点上(而不是在A节点上)设置此属性

docker-compose.yml

代码语言:javascript
运行
复制
version: '3.6'
 
services:
  app:
    image: my_image
    ports:
      - "8033:8000"
    environment:
      - HTTP_PROXY=proxy.server.com:3128
      - HTTPS_PROXY=proxy.server.com:3128
    deploy:
      replicas: 10
      placement:
        constraints: [node.labels.app_server == app_server]
    volumes:
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro

到目前为止,唯一的替代方案是使用不同的变量部署堆栈,并对部署施加约束。但我正在努力避免它。

EN

Stack Overflow用户

发布于 2021-04-21 00:14:19

如何在必要的主机中设置这些环境变量,并将它们传递给容器,如下所示:

代码语言:javascript
运行
复制
version: '3'
 
services:
  app:
    image: ubuntu
    environment:
      - HTTP_PROXY
      - HTTPS_PROXY

只有在主机环境中也设置了它们,才会在容器中设置它们。参见documentation here

示例/更多信息:

代码语言:javascript
运行
复制
# When HTTP_PROXY is set in the host environment, value is passed through to the container.
$ HTTP_PROXY=test docker-compose run app env | grep -i proxy
Creating some-nodes-only_app_run ... done
HTTP_PROXY=test

# When HTTP_PROXY is not set in the host environment, nothing is set in container.
$ docker-compose run app env | grep -i proxy
Creating some-nodes-only_app_run ... done

您还可以编写一个入口点脚本,以便在需要时设置代理。我建议检查容器的连通性,然后在必要时回退到代理,但如果您希望根据主机名执行此操作,则可以使用以下内容:

entrypoint.sh

代码语言:javascript
运行
复制
#!/bin/bash

PROXY_HOSTNAME=some-host
  
if [ -f /etc/host_hostname ]; then
    HOST_HOSTNAME=$(cat /etc/host_hostname)

    if [ "$HOST_HOSTNAME" = "$PROXY_HOSTNAME" ]; then
        echo "Setting fallback http proxy"
        export HTTP_PROXY=${FALLBACK_HTTP_PROXY}
    fi
fi

exec $@

Dockerfile

代码语言:javascript
运行
复制
# test:latest
FROM ubuntu

COPY entrypoint.sh /entrypoint.sh

ENTRYPOINT ["./entrypoint.sh"]

docker-compose.yml

代码语言:javascript
运行
复制
version: '3'
  
services:
  app:
    image: test:latest
    environment:
      - FALLBACK_HTTP_PROXY=test
    volumes:
       - /etc/hostname:/etc/host_hostname:ro

示例运行:

代码语言:javascript
运行
复制
$ docker-compose run app env | grep -i http_proxy
Creating some-nodes-only_app_run ... done
Setting fallback http proxy
FALLBACK_HTTP_PROXY=test
HTTP_PROXY=test
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67182255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档