如何连接到一个运行在Docker容器中的PostgreSQL数据库?

3
我在本地机器上设置了django和postgres容器,一切都正常工作。本地服务器正在运行,数据库也在运行,但我无法连接到创建的postgres数据库。
docker-compose.yml
version: '3'

services:
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db

  db:
    image: postgres:13.0-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - POSTGRES_USER=my_user
      - POSTGRES_PASSWORD=my_password
      - POSTGRES_DB=my_db

volumes:
  postgres_data:

我尝试了这个命令: docker exec -it container_id psql -U postgres 错误: psql: 错误:无法连接到服务器:FATAL:角色“postgres”不存在 我对Docker非常陌生。

在配置文件中,您将用户名和密码设置为my_user/my_password,这些凭据有效吗? - David Maze
我猜它能工作是因为Postgres数据库已经成功地使用这些配置创建了,但我想连接到这个数据库却无法连接?@DavidMaze - Mark
4个回答

3

您没有使用在docker-compose文件中提供的用户名和密码。请尝试以下操作,然后输入my_password

docker exec -it container_id psql -U my_user -d my_db --password

请查看官方文档,了解PostgreSQL终端。


遇到了这个错误:OCI运行时执行失败:执行失败:无法启动容器进程:exec:“export PGPASSWORD = my_password; psql -U my_user -d my_db”:在$ PATH中找不到可执行文件:未知 - Mark
假设您的容器正在运行,请尝试docker exec -it container_id psql -U my_user -d my_db --password,然后输入my_password。应该可以正常工作!请注意,使用$(docker ps | awk '/postgres/ {print $1}')替换container_id更加方便。 - scūriolus

0

我认为你需要将环境添加到项目容器中。

   environment:
      - DB_HOST=db
      - DB_NAME=my_db
      - DB_USER=youruser
      - DB_PASS=yourpass
   depends_on:
      - db

depends_on之前添加这个

现在看看它是否解决了问题


0

你应该在docker-compose文件中为postgres镜像添加端口,这样可以使得postgres容器外可访问。

- ports: 
   "5432:5432"

您可以在此处查看更多内容 docker-compose for postgres


0
我还想补充一点,在你的compose文件中,你没有为db容器暴露任何端口。因此,它将无法通过外部来源(你、你的应用程序或任何不在该容器内运行的东西)访问。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接