Noob Composer / Docker技能
我有一个docker config yml,指定mysql服务如何启动:
version: "2"
services:
mysql:
image: mysql:5.6
ports:
- 3306:3306
volumes:
- /data/nbif_mysql:/var/lib/mysql
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
当我打电话
#!/bin/bash
docker-compose up -d mysql
我看到容器正在运行:
PS C:\dev\appname> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1a0ecab8af6 mysql:5.6 "docker-entrypoint..." 2 hours ago Up 5 seconds 0.0.0.0:3306->3306/tcp appname_mysql_1
但请注意,报告的IP为0.0.0.0:3306->3306/tcp
因此,当我尝试连接预期的IP时,它会失败:
ERROR 2003 (HY000): Can't connect to MySQL server on '172.17.0.1' (10060)
如何告诉docker-compose将这个预期的IP用于docker? 这是一个设置问题,还是我需要做的一些配置调整?
答案 0 :(得分:1)
将端口绑定到主机时,必须使用localhost
而不是容器的IP地址,因为您没有分配任何本地IP地址。
每个容器总是在一个独立的网络(网桥)中运行,您的撰写文件中的容器将能够通过其主机名找到其他容器,但在这些容器中,它们与本地网络,这就是为什么你无法联系到他们。
在您的撰写文件中,您只有一个mysql
容器,并且您正在绑定主机中的该端口,因此访问该容器的唯一方法是使用localhost:3306
请记住,当您运行docker容器时,它不像主机网络中具有IP的服务器,它更像是具有独立网络配置的虚拟机。
查看此特定主题中的docker-compose
文档:
https://docs.docker.com/compose/networking
更新:
最终回答问题的链接是: https://docs.docker.com/engine/userguide/networking/default_network/custom-docker0/