gpt4 book ai didi

postgresql - 从 postgres docker 容器中的环境变量中删除敏感信息

转载 作者:行者123 更新时间:2023-11-29 11:35:40 27 4
gpt4 key购买 nike

我想制作一个 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 的情况下创建数据库、用户和传递。我分享了音量,因为 -

```
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;

我移动到正在运行的容器中,这个文件在那里,但是没有创建文件中提到的用户或数据库。

过去两天我一直坚持这个问题,非常感谢任何帮助。

最佳答案

使用不带值的 args 在 Dockerfile 中构建图像:

ARG PASSWORD 

并使用

构建它
export PASSWORD="MYPASS" && docker build ...

以这种方式运行容器ARG不存在

这是一个完整的例子:

dockerfile:

FROM postgres:10.0-alpine

ARG my_user
ARG my_pass

编写:

version: "3"
services:
db:
build:
context: .
args:
- my_user
- my_pass
environment:
- POSTGRES_USER=${my_user}
- POSTGRES_PASSWORD=${my_pass}
- POSTGRES_DB=db

运行它:

export my_user=test && export my_pass=test1cd && docker-compose up -d --build

现在,如果您登录到容器并尝试echo $my_pass,您会得到一个空字符串

结果:

docker exec -ti 3b631d907153 bash

bash-4.3# psql -U test db
psql (10.0)
Type "help" for help.

db=#

关于postgresql - 从 postgres docker 容器中的环境变量中删除敏感信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57987355/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com