问题描述
我尝试在此处遵循该指南: 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
一切都顺利了.
摘要
- 确保系统中没有任何缓存
- 确保您的数据库容器在启动时不会返回错误.
我希望这将对遇到此问题的所有人有所帮助.
I hope that will help anyone who'll encounter that problem.
这篇关于如何在Docker中运行Rails?PG :: ConnectionBad无法转换主机名"pg".到地址:没有与主机名关联的地址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!