docker-compose 无法自动设置 env 值

docker-compose can't set env values automatically

应用下有start.sh脚本:

scripts/start.sh

#!/bin/bash

source /env/set.sh

env/set.sh内容:

#!/bin/bash
export DB_USERNAME=a
export DB_PASSWORD=b

docker-compose.yml

version: '3.4'
services:
  web:
    build: .
    expose:
      - "5000"
    command: scripts/start.sh
    tty: true
    stdin_open: true

运行docker-compose build && docker-compose up后,登录容器,env值还没有设置。但是应该运行source /env/set.sh手动。 为什么 command: scripts/start.sh 不起作用?

假设您需要在容器启动后设置它并且不能使用docker-compose环境变量。

您正在获取导出所有所需变量的脚本,但随后您关闭了此 bash 会话,您需要的是使导出永久化。我在类似的问题 .

中描述了一种方法

你需要的是一个入口点:

#!/bin/bash

# if env variable is not set, set it
if [ -z $DB_USERNAME ];
then
    # env variable is not set
    export DB_USERNAME=username;
fi

# pass the arguments received by the entrypoint.sh
# to /bin/bash with command (-c) option
/bin/bash -c $@

然后将此脚本作为入口点添加到您的 docker-compose 文件中。