将Rails/Unicorn/Nginx容器连接到MySQL容器
关于thread,我正在尝试创建两个容器:一个是rails应用程序,另一个是MySQL数据库,但我一直收到将Rails/Unicorn/Nginx容器连接到MySQL容器,mysql,docker,containers,Mysql,Docker,Containers,关于thread,我正在尝试创建两个容器:一个是rails应用程序,另一个是MySQL数据库,但我一直收到Mysql2::错误(在我点击容器的IP后,无法通过我的应用程序production.log文件中的socket'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器)http://192.168.59.103 当我启动rails容器时,我正在尝试链接它们,如果我指定了一个错误的MySQL名称,我会得到一个错误。为了成功链接容器,使整个应用程序在容器中运行,我缺
Mysql2::错误(在我点击容器的IP后,无法通过我的应用程序production.log文件中的socket'/var/run/mysqld/mysqld.sock'
连接到本地MySQL服务器)http://192.168.59.103
当我启动rails容器时,我正在尝试链接它们,如果我指定了一个错误的MySQL名称,我会得到一个错误。为了成功链接容器,使整个应用程序在容器中运行,我缺少了什么
Rails容器命令
docker run --name games-app --link test-mysql:mysql -p 8080 -d -e SECRET_KEY_BASE=test sample_rails_games_app
Here are my files:
Dockerfile
# Publish port 8080
EXPOSE 8080
CMD ["bundle", "exec","unicorn", "-p", "8080"]
CMD ["bunde", "exec", "rake", "db:migrate"]
railsdatabase.yml(开发和测试与生产相同)
2015年7月31日的解决方案得益于@Rico
db:migrate
在运行时遇到问题,因此我最终在docker run
命令中手动运行了它。请确保在创建容器后或在创建过程中执行此操作,因为它需要链接到db容器docker run--rm--name--link env
docker inspect-f“{{.HostConfig.links}”
Dockerfile中不能有2个CMD命令,实际上只保留最后一个命令。执行的CMD命令为` CMD[“bunde”、“exec”、“rake”、“db:migrate”]` 另一个是
CMD[“bundle”、“exec”、“unicorn”、“p”、“8080”]
已被取代
见主管
如果您想在容器中运行多个进程,或者运行两个不同的网络容器,实际上您的
bundle exec unicorn-p8080
CMD正在取代bundle exec rake db:migrate
,因为它不会返回
您应该首先运行db:migrate
,然后使用run
命令运行它,因为CMD
是docker中的主要命令
但另一个问题是数据库.yml
文件。您将数据库指向与应用程序运行在同一容器上的db服务器。您应该从将源容器(应用程序)链接到目标容器后创建的环境变量中填充数据库.yml
的值(db服务器容器)。环境变量在源容器中创建
更多信息请点击此处:
例如:
$ docker run --rm --name web2 --link db:db training/webapp env
. . .
DB_NAME=/web2/db
DB_PORT=tcp://172.17.0.5:5432
DB_PORT_5432_TCP=tcp://172.17.0.5:5432
DB_PORT_5432_TCP_PROTO=tcp
DB_PORT_5432_TCP_PORT=5432
DB_PORT_5432_TCP_ADDR=172.17.0.5
您的数据库.yml
应该如下所示:
default: &default
adapter: mysql2
encoding: utf8
pool: 5
database: <%= ENV['DB_NAME'] %>
username: root
password: root
host: <%= ENV['DB_PORT_5432_TCP_ADDR'] %>
port: <%= ENV['DB_PORT_5432_TCP_PORT'] %>
default:&default
适配器:mysql2
编码:utf8
游泳池:5
数据库:
用户名:root
密码:root
主持人:
端口:
谢谢@user2915097。我不是很确定,但是如果我只有unicorn命令,并且unicorn服务器正在运行,问题仍然存在。你赢得了今天的金星奖!这让我在大部分时间里都成功了,我终于能够用修改后的命令链接到DB容器,并验证该链接。我Timitly不得不在另一个Docker运行命令中运行db:create命令,所以我应该把它更好地打包到Docker文件中。非常感谢您的帮助!更新了原始帖子中的命令。我应该给这个问题10个ups…这节省了我的时间
$ docker run --rm --name web2 --link db:db training/webapp env
. . .
DB_NAME=/web2/db
DB_PORT=tcp://172.17.0.5:5432
DB_PORT_5432_TCP=tcp://172.17.0.5:5432
DB_PORT_5432_TCP_PROTO=tcp
DB_PORT_5432_TCP_PORT=5432
DB_PORT_5432_TCP_ADDR=172.17.0.5
default: &default
adapter: mysql2
encoding: utf8
pool: 5
database: <%= ENV['DB_NAME'] %>
username: root
password: root
host: <%= ENV['DB_PORT_5432_TCP_ADDR'] %>
port: <%= ENV['DB_PORT_5432_TCP_PORT'] %>