ruby-on-rails - docker-compose rails app 在用完时找不到数据库,但在运行时找到了

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

我有一个简单的 Rails 应用程序,我正在尝试使用 Docker 运行它。当我运行 docker-compose up 它运行但是当我加载一个页面时它告诉我我的数据库不存在。即使当我运行 docker-compose run app rails db:create 它说数据库已经存在。

docker-compose.yml

version: '2'

services:
  db:
    image: postgres 
  app:
    build: ./rails
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - ./app:/app
    ports:
      - "3000:3000"
    depends_on:
      - db

./rails/Dockerfile

FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /app
WORKDIR /app
ADD ./Gemfile /app/Gemfile
ADD ./Gemfile.lock /app/Gemfile.lock
RUN bundle install

我是 Docker 的新手,所以我可能缺少一些基本的东西。

最佳答案

Rickkwa 是正确的,数据库需要一些时间才能稳定。

您可以使用包含以下内容的 Ruby 脚本来解决此问题:

begin
  retries ||= 0
  Mysql2::Client.new(host: 'db', username: 'root')
rescue
  sleep 1
  retry if (retries += 1) < 10
end

关于ruby-on-rails - docker-compose rails app 在用完时找不到数据库,但在运行时找到了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41078013/

相关文章:

ruby-on-rails - Spree Commerce 中前端和后端的不同区域设置

ruby-on-rails - 使用 Ransack 搜索多个字段

ruby-on-rails - Ruby on Rails 创建方法失败时,渲染会丢失局部变量

postgresql - 如何在 NGINX for PostgreSQL 上配置 proxy_pass?

docker - 单个域的多个位置的 Nginx 代理

ruby-on-rails - cancan & rolify 与 Multi-Tenancy 架构

postgresql - 如何更改 PostgreSQL 中的约束定义?

postgresql - jOOQ:只获得一个结果而不是所有现有条目

python - 在Python中返回带有子进程的进程结束

linux - 从 Docker 容器内部运行 dnsmasq 作为 DHCP 服务器