【问题标题】:Bookshelf.js Not connecting to the correct host?Bookshelf.js 没有连接到正确的主机?
【发布时间】:2018-11-15 14:47:01
【问题描述】:

我正在开发一个已被 docker 化的 express.js 应用程序。这是我给书架的配置信息。

{
    "database_dev" : {
        "client": "mysql",
        "connection": {
            "host": "DB",
            "database": "TERRA_DEV",
            "user": "dev",
            "port": "3306",
            "password": "goon",
            "charset": "utf8",
            "host": ""
        }
    },

    "database_test" : {
        "client": "mysql",
        "connection": {
            "host": "DB",
            "database": "TERRA_TEST",
            "user": "tester",
            "port": "3306",
            "password": "goon",
            "charset": "utf8",
            "host": ""
        }
    },
....

这是我正在运行的 docker-compose.test.yml 以尝试执行我的测试。

version: '2'
volumes:
services:
 sut:
     build: .
     command: npm test
     depends_on:
         - web
 web:
    build: .
    command: "npm start"
    volumes:
      - .:/usr/app/
      - /usr/app/node_modules
    ports:
      - "3000:3000"
    depends_on:
      - redis
      - DB
    networks:
        - web_sql_bridge

 redis:
    image: 'bitnami/redis:latest'
    environment:
        - ALLOW_EMPTY_PASSWORD=yes
    ports:
        - '6379:6379'
 DB:
     image: mysql:5.7
     restart: always
     environment:
         - MYSQL_ROOT_PASSWORD="goon"
         - MYSQL_DATABASE="TERRA_TEST"
         - MYSQL_DATABASE="TERRA_DEV"
         - MYSQL_USER="tester"
         - MYSQL_PASSWORD="goon"
     ports:
         - "3306:3306"
     networks:
         - web_sql_bridge
volumes:
    appconf:

networks:
  web_sql_bridge:
    driver: bridge

这是错误

Error: connect ECONNREFUSED 127.0.0.1:3306
sut_1    |     at Object._errnoException (util.js:1022:11)
sut_1    |     at _exceptionWithHostPort (util.js:1044:20)
sut_1    |     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1198:14)
sut_1    |     --------------------
sut_1    |     at Protocol._enqueue (/TerraServer/node_modules/mysql/lib/protocol/Protocol.js:145:48)
sut_1    |     at Protocol.handshake (/TerraServer/node_modules/mysql/lib/protocol/Protocol.js:52:23)
sut_1    |     at Connection.connect (/TerraServer/node_modules/mysql/lib/Connection.js:130:18)

所以基本上你可以从上面看到,我有一个 config.json,其中包含一些我在 JS 文件中获取的数据库信息,并将其作为参数提供给 bookshelf.js。这在我的 mocha 测试中使用,它会引发我发布的错误。该错误似乎表明它试图连接到 127.0.0.1。为什么 bookshelf.js 在我给它 DB 时尝试连接到 127.0.0.1?

【问题讨论】:

  • 我不知道答案,但在我看来,'web' 位于 'web_sql_bridge' 而 'DB' 不是。我认为他们无法交流,但我不确定。
  • @emory 如果向下滚动,DB 有一个 web_sql_bridge 的网络部分。
  • 你是对的。我没有注意到代码是可滚动的。对不起,错误的提示。
  • 为什么要发布端口 DB 端口“3306:3306”?这不应该是不必要的吗? (与您的问题无关)
  • 为什么要发布端口 DB 端口“3306:3306”?这不应该是不必要的吗? (与您的问题无关)

标签: mysql node.js docker docker-compose knex.js


【解决方案1】:

我发现了我的问题。原来我需要跑步。

docker system prune -a

当我第二次构建时,它不会更新文件,并且我的配置文件在镜像中,但不是我拉代码的仓库。

并且还删除了 DB 环境周围的引号。

DB:
     image: mysql:5.7
     restart: always
     environment:
         - MYSQL_ROOT_PASSWORD=goon
         - MYSQL_DATABASE=TERRA_TEST
         - MYSQL_DATABASE=TERRA_DEV
         - MYSQL_USER=tester
         - MYSQL_PASSWORD=goon

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 2012-09-27
    相关资源
    最近更新 更多