我是Docker的新手,然后按照他们的官方教程运行Ruby on Rails和Postgresql。当我运行docker-compose up
时,一切正常,但当我尝试命令docker-compose run web rake db:create
时,我收到FATAL: role "root" does not exist
的错误。
database.yml
default: &default
adapter: postgresql
encoding: unicode
pool: 5
host: db
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
<<: *default
database: myapp_production
username: postgres
password:
答案 0 :(得分:0)
您正在以root身份运行该命令,并且它尝试使用相同的用户名连接到数据库。您还没有在PostgreSQL中创建用户root,因此您必须这样做。
我建议创建另一个用户名并使用它进行连接,即使名称root在PostgreSQL中没有特殊含义,但通常最好为每个系统分别设置用户/角色。
您需要修改数据库连接设置以反映新用户名。
答案 1 :(得分:0)
我认为最好在RAILS_ENV
docker-compose.yml
的环境值
答案 2 :(得分:0)
如果您正在使用官方的postgres图像from the docker hub,则基于该图像运行容器时启动的postgres服务器的默认用户名是“postgres”,并且不需要密码。您应该将yaml文件更新为:
database.yml中:
default: &default
adapter: postgresql
encoding: unicode
pool: 5
host: db
username: postgres
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
<<: *default
database: myapp_production
假设所有三个数据库都在同一个容器(db)上运行,并且该容器已作为“db”链接到您的rails /应用程序容器。