将运行在 Docker 容器中的 JavaScript 连接到另一个运行在 Docker 容器中的 MySQL 数据库。

10 浏览
0 Comments

将运行在 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

0
0 Comments

问题出现的原因:没有在"links"部分添加主机名。

解决方法:在"links"部分添加主机名。

另外,如果遇到与mysql身份验证模式相关的错误,可以通过修改一些身份验证参数来解决。例如,添加command: --default-authentication-plugin=mysql_native_password。此外,可以参考stackoverflow.com/questions/44946270/…中的不同解决方案(修改root用户以使用本机密码)。

0