Я столкнулся со следующей ошибкой при попытке подключиться к базе данных PostgreSql в контейнере докеров (linux) с рабочего стола Windows через vbscript:
Поставщик Microsoft OLE DB для драйверов ODBC (30, 11): FATAL: ошибка аутентификации пароля для пользователя «dev» FATAL: ошибка аутентификации пароля для пользователя «dev»
Вот демонстрационный vb-code:
Dim cn
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
'Open the Postgre Databse connection (Driver must be installed)
cn.Open "Driver={PostgreSQL ANSI};" & _
"Server=localhost;" & _
"Port=5432;" & _
"UID=dev;" & _
"PWD=dev;" & _
"Database=dbname;"
rs.Open "SELECT * FROM tablename", cn
While Not rs.EOF
WScript.Echo( rs("id") & ": " & rs("name"))
rs.MoveNext
Wend
А вот docker-compose.yml:
version: "3.8"
services:
anon-db:
image: postgres:9.6.3
environment:
POSTGRES_USER: dev
POSTGRES_PASSWORD: dev
POSTGRES_DB: dbname
ports:
- 5432:5432
volumes:
- anon-pgdata:/var/lib/postgresql/data
container_name: anon-db
Vbscript выше отлично работает с неконтейнерной базой данных PostgreSQL. Кто-нибудь может понять, а что не так с настройками контейнера или еще с кодом? Данная ошибка говорит о проблеме с паролем / аутентификацией, но я не понимаю, почему.
Я нашел решение самостоятельно - причина проблемы заключалась в том, что если одновременно с неконтейнеризированным postgre-сервером работал контейнеризированный (т.е. хост-экспонированный) postgre-сервер, то соединение не работало.
После выключения неконтейнеризированного postgre-сервера соединение с контейнеризированным postgre-сервером происходило нормально.
Намек на это был в последнем комментарии по следующей ссылке: https://social.msdn.microsoft.com/Forums/windows/es-ES/6a2fda0a-69b1-4503-8aee-a223e4e9a9d2/fatal-password-authentication-failed-for-user?forum=netfxes