PostgreSQL无法在Docker上构建

时间:2019-12-10 14:54:12

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

我正在尝试运行postgresql并设置我的Rails应用。

这是我的dockerfile:

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

这是我的docker-compose.yml文件:

version: '3'
services:
  db:
    image: postgres
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes: 
        - postgres-data:/var/lib/postgresql/data
    ports:
        - "3000:3000"
    depends_on:
        - db
volumes:
    postgres-data:
        driver: local

这是我在Rails上设置的数据库:

default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: postgres
  password: password203
  host: db

development:
  <<: *default
  database: docker_rails_app_development

  <<: *default
  database: docker_rails_app_test

production:
  <<: *default
  database: docker_rails_app_production
  username: docker_rails_app
  password: <%= ENV['DOCKER_RAILS_APP_DATABASE_PASSWORD'] %>

当我尝试运行sudo docker-compose build时,它运行良好且没有错误。

但是当我运行sudo docker-compose up时,我永远都被这个屏幕困住了:

enter image description here

在另一个屏幕上,我尝试通过sudo docker-compose run web rails db:create创建数据库,由于编写工作无法正常进行,因此该数据库当然不起作用。

FATAL:  password authentication failed for user "postgres"
Couldn't create 'docker_rails_app_development' database. Please check your configuration.
rails aborted!

我正在使用Ubuntu。知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

version: '3'

services:
  postgres:
    image: 'postgres:9.6-alpine'
    restart: always
    environment:
      POSTGRES_USER: 'text'
      POSTGRES_PASSWORD: 'text'
    ports:
      - '5432:5432'
    volumes:
      - 'postgres:/var/lib/postgresql/data'

  web:
    depends_on:
      - 'postgres'
    ....
volumes:
  postgres: {}

答案 1 :(得分:0)

屏幕卡住是正常的。使用

  

docker-compose up -d

在后台启动docker-compose。

请为postgres使用环境变量来定义容器的用户和密码。 示例:

db:
  image: postgres
  restart: always
  environment:
    POSTGRES_PASSWORD: example
    POSTGRES_USER: myuser

有关更多信息,请参见Dockerhub postgres