【发布时间】:2020-01-19 02:11:58
【问题描述】:
我想制作一个 postgres 数据库映像,但不想公开使用 docker-compose.yml 文件生成时存储为环境变量的密码和用户名。基本上,我不希望任何人执行到容器中并找出变量。
一种方法是使用 docker-secrets,但我不想使用 docker swarm,因为我的容器将在单个主机上运行。
我的 docker-compose 文件 -
version: "3"
services:
db:
image: postgres:10.0-alpine
environment:
POSTGRES_USER: 'user'
POSTGRES_PASSWORD: 'pass'
POSTGRES_DB: 'db'
我尝试过的事情 -
1) 在entrypoint-entrypoint.sh末尾取消设置环境变量
for f in /docker-entrypoint-initdb.d/*; do
case "$f" in
*.sh) echo "$0: running $f"; . "$f" ;;
*.sql) echo "$0: running $f"; "${psql[@]}" -f "$f"; echo ;;
*.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "${psql[@]}"; echo ;;
*) echo "$0: ignoring $f" ;;
esac
echo
done
unset POSTGRES_USER
但什么也没发生。 :(
2) docker-entrypoint-initdb.d 中的 init.sql,在不使用 env 的情况下创建 db、user 和 pass。 我分享了卷,因为 -
```
volumes:
- ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
```
并且,在我的主机上,在 docker-entrypoint-initdb.d 中,我将 init.sql 保存为 -
CREATE DATABASE docker_db;CREATE USER docker_user with encrypted password 'pass';GRANT ALL PRIVILEGES ON DATABASE docker_db TO docker_user;
我移动到正在运行的容器中,并且该文件在那里,但是没有创建文件中提到的用户或数据库。
过去两天我一直坚持这一点,非常感谢任何帮助。
【问题讨论】:
-
如果您在 docker-compose 中设置 ENV,它将包含 ENV,只需尝试运行
docker exec -it db bash -c "printenv",而未设置的工作正常。 -
@Adiii ,除了在环境中指定之外,还有其他方法可以创建数据库和用户吗?请阅读我的整个问题。
标签: postgresql docker docker-compose dockerfile docker-swarm