Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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
Can';t使用链接的mysql数据库在docker中启动应用程序_Mysql_Node.js_Docker - Fatal编程技术网

Can';t使用链接的mysql数据库在docker中启动应用程序

Can';t使用链接的mysql数据库在docker中启动应用程序,mysql,node.js,docker,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

我正在使用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文件链接到应用程序容器。请解释如何正确链接mysql容器

提前谢谢

我自己的答案

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

process.env.<container_name>_PORT_<container_port>
因此,在我的应用程序配置中,使用如下环境变量:

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'
    }

链接的
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

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

包括mysql连接的源代码当我使用没有docker的本地mysql服务器时,mysql连接的可能副本工作正常。我的连接配置已附加到此问题。调试时,
/etc/hosts
位对我很有帮助Docker已从指向用户定义网络上的本地DNS服务器的链接中移除,因此这将不适用于非链接容器
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