Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么rails容器没有连接到postgres容器?_Ruby On Rails_Postgresql_Docker_Docker Compose_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails 为什么rails容器没有连接到postgres容器?

Ruby on rails 为什么rails容器没有连接到postgres容器?,ruby-on-rails,postgresql,docker,docker-compose,ruby-on-rails-5,Ruby On Rails,Postgresql,Docker,Docker Compose,Ruby On Rails 5,我是docker rails新手,正在尝试按照以下说明在docker容器中实现现有rails项目: docker-compose.yml version: '3' services: web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/myapp ports: - "3000:3000" depends_on: - db db: image: po

我是docker rails新手,正在尝试按照以下说明在docker容器中实现现有rails项目:

docker-compose.yml

version: '3'
services:
 web:
  build: .
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  volumes:
   - .:/myapp
  ports:
   - "3000:3000"
  depends_on:
   - db
 db:
  image: postgres
  volumes:
   - ./tmp/db:/var/lib/postgresql/data
version: '3'
services:
 web:
  build: .
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  volumes:
   - .:/myapp
  ports:
   - "3000:3000"
  depends_on:
   - db
 db:
  image: postgres
  volumes:
   - pg-db:/var/lib/postgresql/data
   - ../db:/db
  ports:
   - "5432:5432"
 volumes:
   pg-db:
     external: true
Database.yml

default: &default
 adapter: postgresql
 encoding: unicode
 host: db
 username: postgres
 pool: 5
development:
 <<: *default
 database: myapp_development
default: &default
 adapter: postgresql
 encoding: unicode
 host: db
 username: postgres
 pool: 5
development:
 <<: *default
 database: myapp_development
所有的容器都创建好了,并且旋转得很好。在运行docker compose up后,我可以从控制台输出中看到这一点。我甚至可以连接到rails服务器。但是,rails服务器无法连接到postgres服务器:


我的docker配置中是否缺少某些内容,或者我是否需要对docker的rails配置进行更改?

该错误看起来好像没有为postgres转发端口尝试更改docker compose以转发端口

我对Docker没有太多的经验,但我想您会发现,当您重新启动Docker容器时,您的db不会持久化。我建议为db使用外部卷

你的文件看起来不错

如果有经验的人看到这一点,请在评论中确认

docker-compose.yml

version: '3'
services:
 web:
  build: .
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  volumes:
   - .:/myapp
  ports:
   - "3000:3000"
  depends_on:
   - db
 db:
  image: postgres
  volumes:
   - ./tmp/db:/var/lib/postgresql/data
version: '3'
services:
 web:
  build: .
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  volumes:
   - .:/myapp
  ports:
   - "3000:3000"
  depends_on:
   - db
 db:
  image: postgres
  volumes:
   - pg-db:/var/lib/postgresql/data
   - ../db:/db
  ports:
   - "5432:5432"
 volumes:
   pg-db:
     external: true
Database.yml

default: &default
 adapter: postgresql
 encoding: unicode
 host: db
 username: postgres
 pool: 5
development:
 <<: *default
 database: myapp_development
default: &default
 adapter: postgresql
 encoding: unicode
 host: db
 username: postgres
 pool: 5
development:
 <<: *default
 database: myapp_development

我想您需要
docker compose中db下的
ports 5432:5432
docker compose log db
显示什么?可能您的DB容器一开始就没有启动,因为您填充了
/var/lib/postgresql/data
文件夹,这可能会导致问题。感谢您的回复。在进行更改后,我可以使用pgadmin查看postgres服务。但是,我的rails应用程序在查看数据库时仍然存在问题。这是否表明rails配置存在问题?此应用程序已在同事的开发环境中成功实现。