如何在Docker中运行Rails?PG :: ConnectionBad无法转换主机名"pg".到地址:没有与主机名关联的地址 [英] How do I run Rails in Docker? PG::ConnectionBad could not translate host name "pg" to address: No address associated with hostname

查看:70
本文介绍了如何在Docker中运行Rails?PG :: ConnectionBad无法转换主机名"pg".到地址:没有与主机名关联的地址的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试在此处遵循该指南: https://docs.docker.com/compose/rails/

I tried to follow the guide here: https://docs.docker.com/compose/rails/

version: '3'
services:
  pg:                                     ######### LOOK HERE!
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
  web:
    build: .
    command: bundle exec rails server -p 3000 -b '0.0.0.0'
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    depends_on:
      - pg
    links:
      - pg                                     ######### LOOK HERE!
  cms:
    image: joomla
    restart: always
    links:
      - mysql:joomladb
    ports:
      - 8080:80
    environment:
      JOOMLA_DB_HOST: mysql
      JOOMLA_DB_PASSWORD: example
  mysql:
    image: mysql:5.6
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

config/database.yml

# SQLite version 3.x
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
#
default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  timeout: 5000
  host: pg                                     ######### LOOK HERE!
  username: postgres
  password:

development:
  <<: *default
  database: project

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: project_test

production:
  <<: *default
  database: project

控制台

C:\Users\Chloe\workspace\project\src>docker-compose run web rake db:create
Starting src_pg_1 ... done
could not translate host name "pg" to address: No address associated with hostname
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "pool"=>5, "timeout"=>5000, "host"=>"pg", "username"=>"postgres", "password"=>nil, "database"=>"project"}
rake aborted!
PG::ConnectionBad: could not translate host name "pg" to address: No address associated with hostname

docker-compose版本1.20.1,内部版本5d8c71b2,Docker版本18.03.0-ce,内部版本0520e24302

docker-compose version 1.20.1, build 5d8c71b2, Docker version 18.03.0-ce, build 0520e24302

推荐答案

好的,我会尝试回答这个问题:

Ok, I'll try to answer this:

通常,当出现此错误时,它可能意味着运行 db 容器返回了一些错误,并且停止了操作.

Usually when this error appears, it probably means that running the db container returned some errors and it stopped.

我遇到了同样的问题,经过一番挖掘发现我有

I had the same issue and after some digging found that I had

LANG='en_US.UTF-8'
LANGUAGE='en_US:en'
LC_ALL='en_US.UTF-8'

在我的环境变量中设置,导致 db 容器停止.因此,由于容器未运行,因此没有 db 主机.

set in my environment variable and that caused the db container to stop. Therefore as the container was not running, I had no db host.

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

version: '3'

services:
  db:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    env_file: .env
  app:
    build: .
    command: bundle exec puma -p 3000 -C config/puma.rb
    env_file: .env
    volumes:
      - .:/app
    ports:
      - "3031:3000"
    depends_on:
      - db

这里是 config/database.yml

default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  pool: 5
  username: <%= ENV['POSTGRES_USER'] %>
  password: <%= ENV['POSTGRES_PASSWORD'] %>

development:
  <<: *default
  database: driggl_dev

test:
  <<: *default
  database: driggl_test

production:
  <<: *default
  database: driggl_prod

...以及用于开发的 .env 文件:

...and the .env file for development:

POSTGRES_USER=driggl
POSTGRES_PASSWORD=driggl

由于我具有共享的数据库数据卷,因此为了确定起见,我从存储库中删除了 tmp/db 文件夹.

As I had shared volumes for db data, I removed the tmp/db folder from the repository just to be sure.

rm -rf tmp/*

然后我删除了所有容器和图像

then I removed all containers and images

docker rm $(docker ps -q -a) -f
docker rmi $(docker images -q) -f

最后,我再次旋转容器:

Finally I spin up containers again:

docker-compose up --build

一切都顺利了.

摘要

  1. 确保系统中没有任何缓存
  2. 确保您的数据库容器在启动时不会返回错误.

我希望这将对遇到此问题的所有人有所帮助.

I hope that will help anyone who'll encounter that problem.

这篇关于如何在Docker中运行Rails?PG :: ConnectionBad无法转换主机名"pg".到地址:没有与主机名关联的地址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆