【问题标题】:Where do I specify to Postgres within Docker that it should run and accept connections?我在 Docker 中的何处指定 Postgres 应该运行并接受连接?
【发布时间】:2019-04-10 17:55:15
【问题描述】:

我正在尝试对使用 Postgresql 9.5 作为其数据库的现有 Rails 应用程序进行 dockerize。在我的 docker-compose.yml 中。成功完成“docker-compose build”后,我可以运行“docker-compose up”命令并查看连接,但是当我导航到 localhost 时出现以下错误。

PG::ConnectionBad 无法连接到服务器:没有这样的文件或目录服务器是否在本地运行并接受 Unix 域套接字上的连接 >“/var/run/postgresql/.s.PGSQL.5432”?

这是我的 docker-compose.yml 中的内容

version: '2'
services:
  db:
    image: postgres:9.5
    restart: always
    volumes:
      - ./tmp/db:/var/lib/postgresql/9.5/main
    environment:
       POSTGRES_USER: username
       POSTGRES_PASSWORD: password
       POSTGRES_DB: hardware_development

  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

据我所见,我需要在我的 dockerfile 或 docker-compose.yml 中的某处做一些规范,但我要么看不到变化,要么最终回到相同的错误。

我已经能够使用 Docker 自己的文档来使用 Docker Compose 创建一个带有 postgres 的新 Rails 应用程序,在该应用程序中我看到“是的,你在 Rails 上!”页面,但现在使用我自己的代码,我什么也看不到。在 docker 之外运行应用程序也会向我显示测试页面,因此它不是我的 rails 应用程序中的代码或 Docker 之外的 Postgres 环境。

【问题讨论】:

  • 当错误信息询问“服务器是否在本地运行”时,它不是。在此设置中,它应该可以通过主机名 db 访问。
  • 我应该把主机名放在哪里?在 docker-compose.yml 还是其他地方?
  • guides.rubyonrails.org/configuring.html#configuring-a-database 可能是一个不错的起点;但它就像数据库不在本地运行的任何其他 Rails 应用程序一样。
  • 是的,我自己到达那里并在我的 config/database.yml 文件中将“db”指定为主机,但仍然出现相同的错误。

标签: ruby-on-rails postgresql docker docker-compose


【解决方案1】:

您的db docker-compose 条目未公开任何端口。它需要公开 5432。为此添加一个端口行,就像您为 web 所做的那样。

编辑:我也不知道您为什么将restart: always 添加到您的数据库容器中,但我不建议将它用于rails 或几乎任何东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-31
    • 2020-04-12
    • 2021-07-12
    • 1970-01-01
    • 2019-08-15
    • 2021-08-15
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多