sudo /usr/bin/postgresql-setup initdb
Failed to get D-Bus connection: 不允許的操作
failed to find PGDATA setting in postgresql.service
vi /usr/bin/postgresql-setup
錯誤原因是因為setup腳本中使用 systemctl show -p Environment ...
獲取 PGDATA/PGPORT 但是容器中不可以執行 systemctl
vi /usr/lib/systemd/system/postgresql.service
/usr/lib/systemd/system/postgresql.service
修改成
/usr/bin/postgresql-setup
sudo /usr/bin/postgresql-setup initdb
初始化完成
PS:
- 一般創建數據庫容器最好直接使用官方提供的鏡像,通過設置環境變量來控制用戶名、密碼、data目錄等,直接用鏡像啟動。(個人理解容器初衷就想隔離進程,而這種存儲的服務最好就不跟其他在一起,避免互相影響)
-
systemctl enable XXX
以及service XXX start
都不能在docker中使用,會提示:Failed to get D-Bus connection: 不允許的操作。想在docker中啟動服務 需要找到對應的 XX.service 文件,找到對應的命令來啟動進程,例如:(執行時注意用戶權限)/usr/lib/systemd/system/postgresql.service
ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGDATA}
ExecStart=/usr/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
ExecStop=/usr/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/usr/bin/pg_ctl reload -D ${PGDATA} -s