Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Rails/Unicorn/Nginx容器连接到MySQL容器_Mysql_Docker_Containers - Fatal编程技术网

将Rails/Unicorn/Nginx容器连接到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名称,我会得到一个错误。为了成功链接容器,使整个应用程序在容器中运行,我缺

关于thread,我正在尝试创建两个容器:一个是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容器
  • 这让我明白,我的链接并没有被创建,所以无法正确沟通
  • 一旦我了解了如何准确地创建链接,我就用host和port值更新了database.yml
  • 使用此命令检查环境变量的名称
    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'] %>