我正在通过docker-compose运行MySQL,并试图从主机而不是其他容器连接到它。环境被锁定,我不能创建新的docker网络或绑定一个容器到‘主机’网络,桥是唯一的选择。我可以使用容器的IP地址连接到MySQL实例,但这没有多大用处--我需要使用localhost
或127.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)
有什么想法吗?
由于127.0.0.1
和localhost
表示主机
您的Docker
当前正在运行,因此您无法连接到主机的MySQL
。
我还建议使用hostname
连接容器:
docker run -it --network bridge --rm mysql mysql -hmysql_db -utest-user –ppassword