linux - 从 Docker Stack 启动 docker-compose 文件时是否可以获取环境文件

标签 linux docker docker-compose environment-variables docker-stack

当我使用 Docker Stack 启动时,我想创建一个符号链接(symbolic link)并从我的 docker-compose 文件中获取一个环境文件。像这样:

version: '3'

services:
  hello_world:
    image: nginx:latest
    ports:
     - "80:80"
    volumes:
      - ./config:/config:ro   
      - ./data:/data          
    command:
      - /bin/bash
      - -c
      - |
        ln -s /config/lala /etc/nginx/lala
        source /config/env
        nginx -g 'daemon off;'

你可以看到我的命令首先创建了一个符号链接(symbolic link),然后在/config 目录中找到一个环境文件,该文件是卷安装的,然后启动 nginx。我知道还有其他方法可以将环境变量放入 docker-compose 文件中,但我正在尝试将环境方面与 docker-compose 文件本身分离。

我正在使用 Docker Stack 启动它,如下所示:

docker stack deploy -c docker-compose-local.yml nginx-test

但是当我用 shell 进入容器时:

docker exec -it 5c /bin/bash

我可以看到,虽然我的符号链接(symbolic link)有效,但我的环境变量没有加载:

root@5c562e102cf4:/# env
HOSTNAME=5c562e102cf4
NJS_VERSION=1.15.9.0.2.8-1~stretch
NGINX_VERSION=1.15.9-1~stretch
PWD=/
HOME=/root
TERM=xterm
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/env

root@5c562e102cf4:/# cat /etc/nginx/lala 
asdfadf

root@5c562e102cf4:/# source /config/env 
root@5c562e102cf4:/# env
TEST_NGINX_ENV_SETTING=test_setting1
HOSTNAME=5c562e102cf4
NJS_VERSION=1.15.9.0.2.8-1~stretch
TEST_POSTGRES_ENV_SETTING=test_setting2
NGINX_VERSION=1.15.9-1~stretch
PWD=/
HOME=/root
TERM=xterm
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/env

非常感谢任何可以帮助我从已安装的卷中获取此文件或理解为什么我正在尝试做的事情可能根本不起作用的人。

最佳答案

也许您可以尝试在修改后的 dockerfile 中复制卷的内容,并通过入口点加载环境变量。

dockerfile 将是:

FROM nginx:latest
COPY ./config /config

ENTRYPOINT ["bash", "start.sh"]

start.sh 将是:

# !/bin/bash
source /config/env
nginx -g 'daemon off;'

stack.yml 文件将是:

version: '3'

services:
  nginx:
    image: nginx:latest
    ports:
     - "80:80"
    volumes:
      - ./data:/data

注意:您还可以在入口点添加符号链接(symbolic link)。

关于linux - 从 Docker Stack 启动 docker-compose 文件时是否可以获取环境文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55048976/

相关文章:

google-app-engine - 如何从当前系统创建 docker 镜像?

Docker - ADD 和 COPY 的 src 文件在哪里?

r - 当我的 dockerized Shiny 应用程序不起作用时如何查找错误日志

docker - 使用 docker-compose 在停止时重新创建容器

python - 带有pycharm 5的 docker

docker - 无法连接到 wurstmeister/kafka

linux - 如何修复 Linux 项目中的共享库 (.so) 之一?

linux - 将多个 gif 转换为单个 eps

linux - 如何使用 awk 打印选定的连续和随机列

PHP 多进程消失了?