mysql - 无法使用链接的 mysql 数据库在 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
    - 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/

相关文章:

jquery - 如何使用 node.js 更改前端 html

node.js - Swagger NodeJS 文件上传

docker - 如何让 Docker 容器在系统启动时自动启动?

mongodb - MongoExpress显示 “Cannot read property ' listDatabases的“未定义”错误

php - 如何将用户输入的特定元素与数据库进行匹配? -php/mysql/ajax

mysql - 在不同的 AWS 区域设置多主 MySQL 集群

php - 在数据库中查找与用户在 php 中输入的内容最接近的数字匹配

javascript - 如何使用nodejs使搜索不区分大小写?

docker - 禁止docker使用特定网络

javascript - 如果属性未定义则跳到 else