V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
superviolet
V2EX  ›  问与答

宿主机如何访问 docker 容器的 mysql?

  •  
  •   superviolet · 2021-04-01 01:20:26 +08:00 · 1165 次点击
    这是一个创建于 1369 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我在 mac 上起了一个 mysql docker 容器, 我现在想要使用 navicat 连接这个 mysql ? navicat 连接参数 我怎么配置都连不上。球球了。心态炸裂了卧槽了

    2003 - Can't connect to MySQL server on '172.17.0.2' (60 "Operation timed out")

    这是 navicat 提示 我靠 我想白嫖各位大佬

    另外 现在越来越觉得 复制粘贴这个功能。真的有毒 现在百度出来的答案。全都是复制的 我就不明白了。这 tm 一样的垃圾文章 复制来复制去有个毛用?

    各位大佬 怎么看?

    9 条回复    2021-04-04 11:40:46 +08:00
    Leviathann
        1
    Leviathann  
       2021-04-01 01:56:28 +08:00 via iPhone
    就 docker run 的时候指定端口映射啊
    -p 3306:3306
    0bit
        2
    0bit  
       2021-04-01 07:10:03 +08:00
    一楼正解。
    映射之后,在客户端就链接 127.0.0.1:3306 就行了。

    另外,docker 用起来的话,概念不算多,建议简单刷一下概念,建立一个整体概念。

    想对外提供服务就端口映射 [port] ,
    想容器内容持久化就磁盘映射 [volume] ,
    想传递配置进去就用环境变量 [env] ,
    想获取容器的 log 就在内部输出到 [stdout / stderr] ,
    想调用容器的命令,就用 [exec] 。
    touchwithe
        3
    touchwithe  
       2021-04-01 08:19:42 +08:00 via iPhone
    楼上说的对!
    我也想吐槽网上的各种复制粘贴之风,简直是互联网世界的垃圾。
    uselessVisitor
        4
    uselessVisitor  
       2021-04-01 08:32:56 +08:00
    分享一个 docker-compose 文件
    version: '3.1'
    services:
    mysql:
    restart: always
    image: mysql:5.7.22
    container_name: mysql
    ports:
    - 3306:3306
    environment:
    TZ: Asia/Shanghai
    MYSQL_ROOT_PASSWORD: 123456
    command:
    --character-set-server=utf8mb4
    --collation-server=utf8mb4_general_ci
    --explicit_defaults_for_timestamp=true
    --lower_case_table_names=1
    --max_allowed_packet=128M
    --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    volumes:
    - mysql-data:/var/lib/mysql

    volumes:
    mysql-data:
    uselessVisitor
        5
    uselessVisitor  
       2021-04-01 08:34:57 +08:00
    @beichenhpy mysql-data:对应你的本地路径
    KouShuiYu
        6
    KouShuiYu  
       2021-04-01 10:44:24 +08:00
    数据库地址写容器名称就可以
    superviolet
        7
    superviolet  
    OP
       2021-04-01 23:48:58 +08:00
    @Leviathann 找到问题了,是因为宿主机上原来安装了 mysql,还没有验证具体是端口冲突还是别的问题,我现在把宿主机上的 mysql 卸载掉就可以了
    superviolet
        8
    superviolet  
    OP
       2021-04-01 23:51:46 +08:00
    @touchwithe 心累啊~ 本来很多文章就没什么质量,在这基础上 还抄来抄去 看吐了。。。
    julyclyde
        9
    julyclyde  
       2021-04-04 11:40:46 +08:00
    第一,不要在容器里运行基础设施类软件
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1098 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 18:21 · PVG 02:21 · LAX 10:21 · JFK 13:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.