Docker Passenger Dashboard 显示 MySQL 无法连接到套接字

Docker Passenger Dashboard shows MySQL can't connect to socket

我正在尝试在 phusion/passenger-ruby21 容器和单独的 mysql:5.5.46 容器上的 Rails 应用程序上部署 Ruby。两者都没有 docker 组合链接。

I 运行 乘客-ruby 集装箱: sudo docker run -it -p 80:80 --link mysql55:mysql -e .env --name ror1 rubyonrails-phusionimg2 /bin/bash mysql 容器有: sudo docker run --detach --name mysql55 --env MYSQL_ROOT_PASSWORD=**** --env MYSQL_USER=**** --env MYSQL_PASSWORD=**** --env MYSQL_DATABASE=**** mysql:5.5.46

这是我在 Rails 应用程序中的 database.yml

staging:
  adapter: mysql2
  database: "<%= ENV["DATABASE_NAME"] %>"
  host: "<%= ENV["MYSQL_PORT_3306_TCP_ADDR"] %>"
  port: "<%= ENV["MYSQL_PORT_3306_TCP_PORT"] %>"
  username: "<%= ENV["DATABASE_USERNAME"] %>"
  password: "<%= ENV["DATABASE_STAGING_PASSWORD"] %>"

这里是webapp.conf:

# /etc/nginx/sites-enabled/webapp.conf:
 server {
    listen       80;
    server_name  *****.com;
    root /home/app/webapp/public;
    passenger_enabled on;
    rails_env staging;
    index index.html index.htm;
    # auth_basic "Restricted";
    # auth_basic_user_file /etc/nginx/htpasswd;
}

rake db:create db:migrate 成功运行,这意味着具有暂存环境的 rake 程序能够到达 mysql 数据库容器。但是从乘客仪表板我仍然得到 Can't connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2)

我错过了什么吗?所有 env 似乎都已加载并正确。

您没有在您的应用程序中指定 mysql 的连接主机。

如果您不指定主机 mysql 将尝试连接您主机上的服务器,而不是容器中的服务器。

我更改了应用程序 database.yml 文件中的 mysql 数据库环境变量,这些变量在容器启动并连接到 mysql 数据库时预加载。例如 "DATABASE_NAME" 到 "MYSQL_ENV_MYSQL_DATABASE".

staging:
  adapter: mysql2
  database: <%= ENV['MYSQL_ENV_MYSQL_DATABASE'] %>
  host: <%= ENV['MYSQL_PORT_3306_TCP_ADDR'] %>
  port: <%= ENV['MYSQL_PORT_3306_TCP_PORT'] %>
  username: <%= ENV['MYSQL_ENV_MYSQL_USER'] %>
  password: <%= ENV['MYSQL_ENV_MYSQL_PASSWORD'] %>`