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 文件中。
应用下有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 文件中。