使用 docker 部署连接 mysql 问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
su2018
V2EX    Docker

使用 docker 部署连接 mysql 问题

  •  1
     
  •   su2018 2019-09-23 15:30:37 +08:00 5234 次点击
    这是一个创建于 2213 天前的主题,其中的信息可能已经有所发展或是发生改变。

    docker-compose.yml 如图所示 gPL9MX.png

    然后在 php 代码中连接数据库时总是连接不上, 但是使用 Navicat 采用 127.0.0.1 或者是 localhost 都可以连接得上

    测试代码: gPU10i.png

    求大神详解

    18 条回复    2021-11-11 13:50:45 +08:00
    czzhengkw
        1
    czzhengkw  
       2019-09-23 15:56:31 +08:00
    $servername = "mysql"

    docker-compose 自己内部有一套网络,会把 service name 转换为对应的 ip
    su2018
        2
    su2018  
    OP
       2019-09-23 16:13:29 +08:00
    @czzhengkw 也是不行

    Connection failed: php_network_getaddresses: getaddrinfo failed: Name or service not knownPHP Warning: mysqli_connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /opt/project/test2.php on line 18
    PHP Warning: mysqli_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in /opt/project/test2.php on line 18
    ysoserious
        3
    ysoserious  
       2019-09-23 16:20:02 +08:00
    你把代码里的端口改成 3306 试试?
    cwz88
        4
    cwz88  
       2019-09-23 16:20:59 +08:00
    docker-compose.yml 中
    ```
    php:
    image: "php7.2:v2"
    links:
    - "mysql"
    ```
    php 代码中 $servername = "mysql"
    就 ok 了
    wszgrcy
        5
    wszgrcy  
       2019-09-23 16:21:31 +08:00 via Android
    回去帮你看看,之前也配置过
    maichael
        6
    maichael  
       2019-09-23 16:32:10 +08:00
    没记错的话,service 和 service 通信用的是 container port,所以应该连 3306 吧
    lxy42
        7
    lxy42  
       2019-09-23 16:45:21 +08:00 via Android
    networks 不要用 default,default 不支持 dns。
    clives
        8
    clives  
       2019-09-23 16:58:10 +08:00
    networks 使用自定义~
    sarices
        9
    sarices  
       2019-09-23 17:03:19 +08:00
    你可以直接用 127.0.0.1 访问是因为 3306 帮到本地 ip 了,你的 php 容器并没有 3306 端口,在 php 中你可以用本机 ip 作为地址,也可以用 mysql 或者容器 ip 访问
    su2018
        10
    su2018  
    OP
       2019-09-23 17:47:04 +08:00
    @ysoserious
    @cwz88
    @maichael
    经测试: yml 文件中 php: 改为--- links: "mysql" 而不是 depends_on 时采用 mysql:3306 可以连接到. 但是还是觉得这种连接方式有点奇怪, 为啥 Navicat 可以通过 127.0.0.1:3310 和 localhost:3310 连接
    su2018
        11
    su2018  
    OP
       2019-09-23 17:54:08 +08:00
    @sarices 哦哦 好像有点明白了, 你的意思是 mysql 容器的 3306 绑定了本机的 3310 所以通过 Navicat 时可以直接访问 3310 连接到 但是在 php 容器里 没有对应的 3310 绑定 mysql 容器的 3306 所以连接不上?
    cwz88
        12
    cwz88  
       2019-09-23 17:57:28 +08:00
    跟 Navicat 没关系,只是 docker 外部可以用自定义的 3310,docker 内部要用 3306
    XSG
        13
    XSG  
       2019-09-23 18:01:01 +08:00
    3310 是宿主机端口,只能通过宿主机网络访问 mysql,你的 navicat 跑在宿主机上,当然可以访问
    而 3306 是容器端口,上面有同学说过了,通过--links 方式访问,这是使用的容器网络,要和宿主机网络区分开
    sarices
        14
    sarices  
       2019-09-23 18:03:44 +08:00
    @su2018 就是这个意思
    virus94
        15
    virus94  
       2019-09-23 18:12:49 +08:00
    同遇到这个问题,不知道咋解决...
    su2018
        16
    su2018  
    OP
       2019-09-24 09:11:02 +08:00
    @virus94 嗯 我也折腾了好久
    julyclyde
        17
    julyclyde  
       2019-09-24 16:15:55 +08:00
    docker 发明了其它社会制度不存在的问题,并致力于解决它
    asuraa
        18
    asuraa  
       2021-11-11 13:50:45 +08:00
    好像是因为 docker-compose 的版本 3 就会这样 改成 2 就好了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3713 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 10:27 PVG 18:27 LAX 03:27 JFK 06:27
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86