繁体   English   中英

如何在 docker 中为 postgresql 设置入口点 initdb 脚本?

[英]How do I setup entrypoint initdb scripts for postgresql in docker?

我使用 Docker 在我的 Synology NAS 上设置了 postgresql 数据库。 容器启动,我可以使用 ssh (psql) 和 DataGrip 访问 postgresql。 但问题是我创建的初始化脚本没有按预期工作,它们没有创建任何数据库。

当我添加另一个初始化脚本但使用不同的用户时,我可以在检查角色文件夹(在 DataGrip 中)时看到添加了该角色,但我从未看到任何具有相同名称的数据库。 当使用 psql \du 时,我也看不到我在 DataGrip 中看到的初始化脚本正在创建的角色。

因此,由于正在创建用户,我假设我的配置文件夹中的初始化脚本正在运行,但是为什么在使用 psql \du 时不创建数据库而不是可见的角色?

注意:在运行 docker-compose up -d 之前,我已经对 posgres 图像进行了修剪并清空了数据文件夹,以确保没有留下给我带来问题的旧东西。

docker-compose.yml

version: '3'
services:
  postgresql:
    container_name: postgresql
    restart: always
    image: postgres:latest
    network_mode: "bridge"
    environment: 
    - TZ=Europe/Stockholm
    - VERSION=latest
    - POSTGRES_USER=synology
    - POSTGRES_PASSWORD=synology
    ports:
    - "3456:5432"

    volumes:
    - /volume1/docker/postgresql/data:/var/lib/postgresql/data
    - /volume1/docker/postgresql/config:/docker-entrypoint-initdb.d

    cap_add:
    - DAC_READ_SEARCH
    - NET_BIND_SERVICE
    - SETGID
    - SETUID
    - SYS_ADMIN
    - SYS_PTRACE

    security_opt:
    - apparmor:unconfined

init.sql

CREATE USER synology with encrypted password 'synology';
CREATE DATABASE synology;
GRANT ALL PRIVILEGES ON DATABASE synology TO synology;

在此处输入图像描述

有人知道这里可能有什么问题吗?

更新:我开始认为,当我使用 psql 命令时,我访问的是 Synology 本地数据库,而不是我容器中的数据库……但仍然没有解释为什么只创建用户而不是我的数据库。

好的,所以我在这里有点愚蠢,我基本上是在运行 psql 命令时访问 Synology postgres DB。 我首先需要在容器docker exec -it CONTAINER_ID bash中打开 bash ,然后运行psql -U postgres并查看他们创建的所有用户。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM