我正在使用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'
}
答案 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