Ich habe mich entschlossen, einen Schritt zurückzutreten, um zu prüfen, ob ich eine Verbindung zur Datenbank herstellen kann, ohne Ports freizugeben. 
Wenn ich in den Container eintrete, sehe ich Folgendes:
# netstat -lp | grep postgres
tcp 0 0 0.0.0.0:postgresql 0.0.0.0:* LISTEN -
tcp6 0 0 [::]:postgresql [::]:* LISTEN -
unix 2 [ ACC ] STREAM LISTENING 263612292 - /var/run/postgresql/.s.PGSQL.5432
Wenn ich den Container verlasse und mich auf meinem Remote-Server befinde (noch nicht auf meinem lokalen Computer), sollte ich dann nicht eine Verbindung wie folgt herstellen können?
/var/discourse# psql -h localhost -d discourse -U postgres
Das Problem ist, dass ich nach einem Passwort gefragt werde. Da der postgres-Benutzer keines hat, habe ich versucht, einen anderen Benutzer zu erstellen und ihm ein Passwort zuzuweisen:
CREATE USER whatever_user WITH ENCRYPTED PASSWORD '<whatever password>';
GRANT CONNECT ON DATABASE discourse TO whatever_user;
GRANT USAGE ON SCHEMA public TO whatever_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO whatever_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO whatever_user;
Ich habe eine Zeile für diesen Benutzer mit md5 in pg_hba.conf hinzugefügt und PG mit service postgresql restart neu gestartet.
# Database administrative login by Unix domain socket
local all postgres peer
local all whatever_user md5
Wenn ich jedoch vom Remote-Server aus eine Verbindung versuche, erhalte ich einen Authentifizierungsfehler:
# psql -h localhost -d discourse -U whatever_user
Password for user whatever_user:
psql: FATAL: password authentication failed for user "whatever_user"
FATAL: password authentication failed for user "whatever_user"
Was übersehe ich? Ich möchte zumindest in der Lage sein, eine Verbindung zur Datenbank vom selben Server aus herzustellen. Schritt 2 wäre, dasselbe über einen SSH-Tunnel zu tun, aber ich muss vermutlich zuerst Schritt 1 erledigen. Jegliche Hilfe wird geschätzt.