我尝试按照此处的指南进行操作:https://docs.docker.com/compose/rails/
docker-compose.yml
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,build 5d8c71b2,Docker版本18.03.0-ce,build 0520e24302
答案 0 :(得分:2)
此设置适用于在docker上运行rails。基本上需要指定一个URL,这样你就可以使用.env文件来指定postgres url,你将使用你的config / database文件在_development _test和_production之间进行更改,只需添加env即可。将文件发送到您的Web服务docker-compose文件:
/docker-compose.yml:
services:
postgres:
image: postgres:9.6
restart: always
environment:
POSTGRES_USER: kunzig #DockerHub postgres docs state this is optional but must be used when password is set. It will also create a db under the supplied username which you'll use to connect to in rails console such as: $docker-compose exec postgres psql -U YourUserNameHere
POSTGRES_PASSWORD: 'whateverPWYouWant'
ports:
- '5432' #Was originally 5432:5432 with the Left hand side being port on host machine, right hand side is the port on the docker container. However I let docker choose the port it will use by supplying because 5432 is running on my local for other projects.
volumes:
- postgres:/var/lib/postgresql/data
web:
build: . #Runs the docker build command on the current directory
links: #Links the listed services to our application so containers can talk to eachother
- postgres
- redis
restart: always
volumes:
- .:/kunzig #Left hand side is current directory of compose file, right hand side is container folder. This needs to be same as Install_path folder in Dockerfile.
ports:
- '8000:8000' #Left is the local port and the right side is the container port
env_file:
- .YourProjectNameHere.env #This should be in your root project directory along side the Dockerfile and docker-compose file
depends_on:
- 'redis'
- 'postgres'
/。projectname.env
DATABASE_URL=postgresql://PostgresUserNameHere:PasswordFromDockerCompose@postgres:5432/PostgresUsername?encoding=utf8&pool=5&timeout=5000
/config/database.yml
development:
url: <%= ENV['DATABASE_URL'].gsub('?', '_development?' ) %>
test:
url: <%= ENV['DATABASE_URL'].gsub('?', '_test?' ) %>
production:
url: <%= ENV['DATABASE_URL'].gsub('?', '_production?' ) %>
保持您的网络服务与pg服务链接,你应该好好去注意我改为调用我的服务postgres。
答案 1 :(得分:1)
好的,我会尝试回答这个问题:
通常,当出现此错误时,它可能意味着运行mapPolicySteps
容器返回了一些错误,并且停止了。
我遇到了同样的问题,经过一番挖掘发现我有
db
在我的环境变量中设置,导致LANG='en_US.UTF-8'
LANGUAGE='en_US:en'
LC_ALL='en_US.UTF-8'
容器停止运行。因此,由于该容器未运行,因此我没有db
主机。
这是我的db
文件的样子:
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
由于我具有共享的数据库数据卷,因此为了确定起见,我从存储库中删除了POSTGRES_USER=driggl
POSTGRES_PASSWORD=driggl
文件夹。
tmp/db
然后我删除了所有容器和图像
rm -rf tmp/*
最后,我再次旋转容器:
docker rm $(docker ps -q -a) -f
docker rmi $(docker images -q) -f
一切都顺利了。
摘要
我希望这会对遇到此问题的所有人有所帮助。