将运行在 Docker 容器中的 JavaScript 连接到另一个运行在 Docker 容器中的 MySQL 数据库。
将运行在 Docker 容器中的 JavaScript 连接到另一个运行在 Docker 容器中的 MySQL 数据库。
我目前正在使用docker-compose和相应的docker-compose.yaml文件在本地实例上运行RocketChat和RocketBot。我使用标准的mysql模块,如下所示:
var con = mysql.createConnection({ host: '', user: 'root', port: '3306', password: ' ', });
主机、用户、端口和密码是从包含MySQL服务器的容器上运行inspect命令中获取的。MySQL确实工作,因为我可以运行它并对其进行更改,甚至可以使用MySQL Workbench连接到它。我收到了这个错误:
rosbot_1 | [Tue Jun 18 2019 18:42:06 GMT+0000 (UTC)] ERROR Error: connect ETIMEDOUT
rosbot_1 | at Connection._handleConnectTimeout (/home/hubot/node_modules/mysql/lib/Connection.js:412:13)
我不知道该如何继续,如何使用JavaScript从由docker-compose提供的机器人连接到MySQL容器?
编辑:
docker-compose.yaml:
version: '2.1' services: mongo: image: mongo:3.2 hostname: 'mongo' volumes: - ./db/data:/data/db - ./db/dump:/dump command: mongod --smallfiles --oplogSize 128 --replSet rs0 mongo-init-replica: image: mongo:3.2 command: 'mongo mongo/rocketchat --eval "rs.initiate({ _id: ''rs0'', members: [ { _id: 0, host: ''localhost:27017'' } ]})"' links: - mongo:mongo rocketchat: image: rocketchat/rocket.chat:latest hostname: 'rocketchat' volumes: - ./rocketchat/uploads:/app/uploads environment: - PORT=3000 - ROOT_URL=http://localhost:3000 - MONGO_URL=- MONGO_OPLOG_URL= healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000"] interval: 30s timeout: 10s retries: 5 links: - mongo:mongo ports: - 3000:3000 : image: hostname: " " environment: - ROCKETCHAT_URL= - ROCKETCHAT_ROOM="" - ROCKETCHAT_USER= - ROCKETCHAT_PASSWORD= - ROCKETCHAT_AUTH= - BOT_NAME= - LISTEN_ON_ALL_PUBLIC=true - EXTERNAL_SCRIPTS=hubot-help,hubot-seen,hubot-links,hubot-diagnostics,hubot-pugme,hubot-reload - PENTEXT_PATH=/home/hubot/pentext - ADDITIONAL_PACKAGES=mysql,lodash - RESPOND_TO_LIVECHAT=true - RESPOND_TO_DM=true depends_on: rocketchat: condition: service_healthy links: - rocketchat:rocketchat volumes: - ports: - 3001:3001
问题出现的原因:没有在"links"部分添加主机名。
解决方法:在"links"部分添加主机名。
另外,如果遇到与mysql身份验证模式相关的错误,可以通过修改一些身份验证参数来解决。例如,添加command: --default-authentication-plugin=mysql_native_password
。此外,可以参考stackoverflow.com/questions/44946270/…中的不同解决方案(修改root用户以使用本机密码)。