在 Docker 图像中自定义 Postgres 数据库

Customising Postgres Database inside Docker image

虽然默认 Postgres Image 可以满足我的需求,但我想对数据库和其中的用户进行个性化设置。

pulling the image 之后数据库有一个用户 postgres 没有任何密码。

假设此代码 运行 是图像:

docker run -p 5432:5432 postgres

我怎么运行里面的psql命令呢? (删除 'postgres' 用户、创建新数据库、更多用户等)

官方 postgres 图像接受环境变量来创建具有密码和自定义数据库名称的自定义超级用户。

如果您不希望在 运行 容器时提供这些变量,您可以使用官方 postgres 图像作为基础创建一个图像,添加一个 bash 脚本来设置适当的环境变量和调用入口点脚本 docker-entrypoint.sh.

如果您希望添加更多数据库或用户,您可能希望将脚本完全替换为您自己的脚本(该文件位于容器内的 /usr/local/bin/ 下)。您可能会对以下几行感兴趣:

"${psql[@]}" --username postgres <<-EOSQL
            CREATE DATABASE "$POSTGRES_DB" ;
        EOSQL

"${psql[@]}" --username postgres <<-EOSQL
        $op USER "$POSTGRES_USER" WITH SUPERUSER $pass ;

运行 另一个容器上的 psql 和 link 它:

$ docker run -it --rm --link <running-postgres-container-id> postgres psql -h postgres -U postgres

或者,运行 同一容器上的 psql:

$ docker exec -it <running-postgres-container-id> psql -U postgres