提问者:小点点

如何通过网络桥连接到mysql docker实例?


我正在通过docker-compose运行MySQL,并试图从主机而不是其他容器连接到它。环境被锁定,我不能创建新的docker网络或绑定一个容器到‘主机’网络,桥是唯一的选择。我可以使用容器的IP地址连接到MySQL实例,但这没有多大用处--我需要使用localhost127.0.0.1。这可能吗?如果是,怎么做?

Docker-compose.yml

version: '2.2'
services:
  db:
    container_name: mysql_db
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: 'test-db'
      MYSQL_USER: 'test-user'
      MYSQL_PASSWORD: 'password'
      MYSQL_ROOT_PASSWORD: 'password'
    network_mode: bridge
    ports:
      - '3306:3306'
    expose:
      - '3306'
volumes:
  my-db:

我可以使用容器的IP进行连接,如下所示:

docker run -it --network bridge --rm mysql mysql -h172.17.0.3 -utest-user –ppassword

但无法使用localhost进行连接,如下所示:

docker run -it --network bridge --rm mysql mysql -hlocalhost -utest-user -ppassword

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

其他选项(如127.0.0.1)也不起作用:

ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)

有什么想法吗?


共1个答案

匿名用户

由于127.0.0.1localhost表示主机您的Docker当前正在运行,因此您无法连接到主机的MySQL

我还建议使用hostname连接容器:

docker run -it --network bridge --rm mysql mysql -hmysql_db -utest-user –ppassword