我正在使用 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 镜像链接到应用程序容器。请解释如何正确链接 mysql 容器。
提前致谢!
我自己的回答
当您使用任何类型的链接其他容器(external_link 或 link)时,您可以根据容器的名称在应用程序配置文件中设置进程环境变量
process.env.<container_name>_PORT_<container_port>
SailsJS 到 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'
}
最佳答案
链接的 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 - 无法使用链接的 mysql 数据库在 docker 中启动应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33945025/