无法使用链接的mysql数据库

时间:2015-11-26 18:23:56

标签: mysql node.js docker

我正在使用docker来运行我的nodejs应用程序,其中包含几个数据库,其中一个是mysql。

我在docker hub上找到了mysql图像并在我的 docker-compose.yml

中使用它
app:
  build: .
  volumes:
    - ./:/var/www/app/
  working_dir: /var/www/app/
  command: node app.js
  ports:
    - "3000:3000"
  links:
    - mongo
    - elasticsearch
    - mysql

mysql:
  image: mysql
  environment:
    MYSQL_DATABASE: testdb

mongo:
  image: mongo

elasticsearch:
  image: elasticsearch

所有构建和应用程序都使用mysql conenction配置,如下所示:

mysql: {
      host: 'localhost',
      user: 'root',
      password: '',
      database: 'testdb'
    }

应用程序试图启动和停止mysql连接错误。

Error: connect ECONNREFUSED 127.0.0.1:3306

我想知道docker mysql图像是否可以通过compose文件链接到app容器。请解释如何正确链接mysql容器。

提前致谢!

我自己的回答

当您使用任何类型的链接其他容器(external_link或link)时,您可以根据容器名称在应用程序配置文件中设置过程环境变量

process.env.<container_name>_PORT_<container_port>

SailsJS to Mongo示例:

我有一个名为mongo_dev的容器,它在我的docker compose文件中连接为

external_links:
  - mongo_dev

所以在我的应用程序配置中使用这样的环境变量:

mongo: {
      module   : 'sails-mongo',
      host     : process.env.MONGO_DEV_PORT_27017_TCP_ADDR || 'localhost',
      port     : process.env.MONGO_DEV_PORT_27017_TCP_PORT || '27017',
      user     : null,
      password : null,
      database : 'database_name'
    }

2 个答案:

答案 0 :(得分:6)

链接的mysql容器将是您的mysql主机

mysql: { host: 'mysql', user: 'root', password: '', database: 'testdb' }

您将看到所有链接的主机都在/etc/hosts中命名,如:

172.17.0.2  composetest_mysql_1 fffb39e63df6
172.17.0.2  mysql fffb39e63df6 composetest_mysql_1
172.17.0.2  mysql_1 fffb39e63df6 composetest_mysql_1

答案 1 :(得分:0)

如下使用连接字符串: mysql://username:password@mysql:3306/demo