不确定这是否是 Docker for Mac、我的 Postgres 安装(通过 Homebrew)的问题,或者其他一些奇怪的本地问题。
可能值得一提的是,我从未在 Linux 上遇到过这个问题。
这是我的
docker-compose.yml
文件中使用 postgres
图像的片段:
services:
postgres:
image: postgres
environment:
- POSTGRES_DB=some_db
- POSTGRES_USER=some_user
- POSTGRES_PASSWORD=supersecretpassword
ports:
- 5432:5432
启动撰写服务后
docker-compose up
,我可以看到我的 postgres 容器正在运行(docker ps
)。
我也可以通过
docker exec
直接连接到它
docker exec -it <container_id> psql -d some_db -U some_user
到目前为止,一切都按预期进行......
但是,当我尝试通过本地 psql 客户端连接到我的 Docker postgres 实例时:
psql -h localhost -p 5432 -U some_user -d some_db
它没有连接到 postgres 的 Docker 实例,而是尝试使用我的本地 postgres 实例。
现在奇怪的部分...
当我更改端口绑定时
docker-compose.yml
来自5432:5432
到
5433:5432
(5433可以是任何开放端口)
我能够通过本地 psql 客户端按预期连接到 Docker postgres 实例:
psql -h localhost -p 5433 -U some_user -d some_db
# After being prompted for my password I'm in!
我不介意绑定到不同的端口,但我仍然很好奇这里发生了什么!
有人知道发生了什么事吗?
谢谢!
刚刚被同样的问题绊倒了。我有一个由“brew”运行的 postgres 实例。
在 mac 上查找运行在端口上的进程:
sudo lsof -i :5432
然后我跑了
brew services stop postgresql@14
还有中提琴!港口是免费的...