sudo docker run --name first-mysql2 -p 3306:3306 -e MYSQL\_ROOT\_PASSWORD=123456 -d mysql
生成容器为
087e18f3ab85        0977f3a915e5        "docker-entrypoint..."   23 seconds ago      Up 20 seconds       0.0.0.0:3306->3306/tcp             first-mysql2
sudo docker run --name first-mysql2 -p 3308:3308 -e MYSQL\_ROOT\_PASSWORD=123456 -d mysql
生成容器为
cbe8dad89801        0977f3a915e5        "docker-entrypoint..."   5 minutes ago       Up 5 minutes        3306/tcp, 0.0.0.0:3308->3308/tcp   first-mysql1可以看到3308端口创建的容器在端口号那一列前面多了3306/tcp,不确定是不是这个原因,导致在用客户端访问mysql的时候只有3306端口才能访问,3308无法访问。
也并不是先后创建的问题,如果只用-p 3308:3308创建 在端口号那一列依旧是带上3306/tcp 的,客户端也是没法访问的。
有大神指点下吗 是啥问题

解决方案 »

  1.   

    我没有在docker 环境下安装过mysql服务,我给个建议看看是不是可行的。
    mysql容器一:
    sudo docker run --name first-mysql2 -p 13306:3306 -e MYSQL\_ROOT\_PASSWORD=123456 -d mysql
    mysql容器二:
    sudo docker run --name first-mysql2 -p 13307:3306 -e MYSQL\_ROOT\_PASSWORD=123456 -d mysql
    这样是否启动了两个容器分别使用 13306 和13307端口
      

  2.   

    容器内部的端口只能是3306,这是mysql的默认端口,除非你改mysql镜像的Dockerfile。
      

  3.   

    dock run 中的 -p 外部主机的端口 : docker内部服务的端口
    你3308要从外部访问,你的确保对应的dockr 容器的 3308 是 mysql的端口才行,
    或者你的本意应写成 -p 3308:3306 才对。
      

  4.   

    如果通过Link访问 ,则使用的是 expose端口,如果是宿主机+映射port,则使用映射端口
      

  5.   

    楼主第二条执行是错误的,端口应该是宿主机的3308映射容器的3306端口,mysql默认是3306端口,楼主执行第二条命令返回的结果中会有3306/tcp原因就是这个是容器的默认端口,容器中并没有3308端口,所以楼主在用客户端连接的时候会出现无法连接
      

  6.   

    一般来说,mysql的docker镜像的默认IP是3306
    你可以先做一个自己的镜像,镜像中的mysql你可以安装两个mysql数据库,使其端口分别为3306与3308
    再用此镜像生成容器
    或者
    你可以用你原来的那个镜像,启动了两个容器,使用外部的端口3308  -p 3308:3306
      

  7.   

    mysql默认连接端口就是3306
    你没做特殊配置   那个3308是连不上mysql的