代码之家  ›  专栏  ›  技术社区  ›  Taylor

连接到mysql容器:docker compose项目中localhost的等效物是什么?

  •  0
  • Taylor  · 技术社区  · 4 年前

    我有这个 docker-compose.yml 文件,它有一个服务( log_app )尝试写入mysql数据库( mydb ).

    version: '3.4'
    services:
      mydb:
        container_name: mysql_data
        restart: always
        image: mysql:8.0.22
        environment:
          MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PW}
          MYSQL_DATABASE: ib
          MYSQL_PASSWORD: ${MYSQL_PW}
        volumes:
          - ./init.sql:/docker-entrypoint-initdb.d/init.sql
          - ./mysql-data:/var/lib/mysql
      tws:
        build: .
        container_name: ib_logger_app
        volumes:
          - ./ib/IBController.ini:/root/IBController/IBController.ini
          - ./ib/jts.ini:/root/Jts/jts.ini
        environment:
          TRADING_MODE: ${TWS_TRADING_MODE}
          TWSUSERID: ${TWS_USER_ID}
          TWSPASSWORD: ${TWS_PASSWORD}
          FIXUSERID:
          FIXPASSWORD:
          XVFB_ARGS: -ac -screen 0 1024x768x16 +extension RANDR
        restart: always
        ports:
          - 5901:5900
        depends_on:
          - mydb
      log_app:
        build: log_app/ib_client
        environment:
          - IB_GATEWAY_URLNAME=tws
          - IB_GATEWAY_URLPORT=4004
          - MKT_DATA_TYPE=4
        restart: on-failure
        depends_on:
          - tws
          - mydb
    volumes:
      mysql-data:
    

    当我在裸机服务器上运行此程序时,一切正常,但在这种情况下,我连接到 localhost 在港口 3306 不过,这似乎在这里行不通。我明白了

    Can't connect to MySQL server on 'localhost' (99)
    

    我一直在读3306仍然是正确的端口,但是 本地服务器 127.0.0.1 现在错了。两者都不适合我。

    我在这个网站上也看到了一些建议改变的答案 本地服务器 host.docker.internal ,但这给了我:

    Can't connect to MySQL server on 'host.docker.internal' (111)
    
    1 回复  |  直到 4 年前
        1
  •  2
  •   ItayB    4 年前

    主机名将是docker compose文件中定义的容器名称。

    在您的示例中,您应该使用 mydb:3306 而不是 localhost:3306

    编辑 :

    确保这一点的一种方法是 exec 进入您想要连接的容器并运行:

    telnet mydb 3306
    

    看看它是否有效(但可能需要额外安装 telnet ).