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

时间:2020-12-31 05:51:32

标签: mysql docker docker-compose

我有这个 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 仍然是正确的端口,但是 localhost127.0.0.1 现在是错误的。都不适合我。

我还在此网站上看到一些建议将 localhost 更改为 host.docker.internal 的答案,但这给了我:

Can't connect to MySQL server on 'host.docker.internal' (111)

1 个答案:

答案 0 :(得分:2)

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

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

编辑

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

telnet mydb 3306

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

相关问题