Can';t使用链接的mysql数据库在docker中启动应用程序
我正在使用docker运行我的nodejs应用程序,其中只有几个数据库,mysql就是其中之一 我在docker hub上找到了mysql图像,并将其用于我的docker compose.ymlCan';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
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