Docker的一些随记

一、问题记录

1、启动问题

  1. 报错

    1. Docker: error invoking remote method ‘docker-start-container‘: error: (http code 500) server error

      Docker容器无法启动,启动后报错:
      
      error invoking remote method 'docker-start-container': error: (http code 500) server error - ports are not available: listen tcp 0.0.0.0:3306: bind: an attempt was made to access a socket in a way forbidden by its access permissions.
      1
      首先重启计算机(宿主),重启后在命令行(或WSL2)执行
      
      docker ps -a
      1
      查看无法启动的容器ID,接着执行
      docker restart 容器ID
      如果还无法启动,尝试允许Windows(Linux)防火墙通过该端口,确定不是防火墙拦截
      
      **#以上解决都无效**
      
    2. 1213

  2. 解决docker启动容器时,端口被占用错误

    今天在启动本机的kafka容器时, 报了如下错误:

    docker: Error response from daemon: Ports are not available: listen tcp 0.0.0.0:9091: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
    本机的环境是:

    win10 64
    docker desktop 3.2.1
    机器有启用hyper-v (罪魁祸首)

    使用netstat -ano | findstr 9091排查是否有程序占用了9091端口, 结果为没有.

    netstat -ano | findstr '8080' #查看8080的端口号被哪个id_num的task给占用
    
    tasklist|findstr 'id_num'
    

    在此之前, idea启动tomcat时, 以debug模式会报, debug的端口被占用, 以run模式启动, 会报1099端口被占用. 当时发现如果重启电脑, 直接开启idea, 可以正常启动(怀疑是被什么占用了, 和它抢速度…)

    netsh int ipv4 show dynamicport tcp

    协议 tcp 动态端口范围

    启动端口 : 1024
    端口数 : 13977

    hyper-v会保留部分tcp端口, 使用命令:

    netsh interface ipv4 show excludedportrange protocol=tcp

    可以得到:

    协议 tcp 端口排除范围

    开始端口 结束端口


      5357        5357
      6821        6920
      6944        7043
      7118        7217
      7218        7317
      8201        8300
      9055        9154
      9169        9268
      9330        9429
      9783        9882
      9883        9982
     13628       13727
     13954       14053
     31082       31082
     50000       50059     *
    
    
    • 管理的端口排除。
      赫然发现9091在排除范围之内, 于是修改启动命令(主要是修改端口):

    docker run -d --name kafka --publish 9155:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=10.123.2.22:2181 --env KAFKA_ADVERTISED_HOST_NAME=10.123.2.22 --env KAFKA_ADVERTISED_PORT=9092 wurstmeister/kafka

    容器可以正常启动.

    我这种是绕过了被保留的端口, 如果你的程序一定要使用范围内的端口, 可以参考以下链接, 其介绍了配置保留端口的方式. 基本上是:

    1.暂时关闭hyper-v

    2.配置端口

    3.恢复hyper-v

    解决 win10 hyper-v 保留端口占用问题

  3. TODO

二、安装mysql

2、windows下docker安装mysql,应用自己的配置项

  1. 修改配置项

    #先启动一个mysql的container
    docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest --default-authentication-plugin=mysql_native_password
    #容器运行后,导出默认配置,对配置项进行更改
    docker cp mysql:/etc/mysql/my.cnf I:/docker/mysql/conf/
    

    修改配置项,一般需进行如下的配置:

    [mysqld]
    
    #表名大小写是否敏感
    lower case table names=1#是否开启慢查询日志 slow query log =oN
    #慢查询的阈值,单位秒 long query time=3
    #是否记录未使用索引的查询语句,记录在慢查询日志 log-queries-not-using-indexes=ofF#错误日志
    log-error=/var/lib/mysq1/error.log#慢查询日志
    slow query log file=/var/lib/mysql/slowquery.log#允许导入导出
    secure-file-priv=''
    
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    datadir         = /var/lib/mysql
    secure-file-priv= NULL
    # Disabling symbolic-links is recommended to prevent assorted security risks 
    symbolic-links=0
    
    # Custom config should go here
    !includedir /etc/mysql/conf.d/
    
  2. 利用现有的配置,重新生成一个新容器

    1. 先停止老容器并删除

      #先停止老容器并删除
      docker stop mysql
      docker rm mysql
      #重新运行一个mysql容器,本地电脑放在I盘,因此用的是/i/docker/mysql/
      docker run --name mysql -p 3306:3306 -v /i/docker/mysql/data:/var/lib/mysql/ -v /i/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest --default-authentication-plugin=mysql_native_password
      
      #或者方式是
      docker run --name mysql-b -p 3306:3306 -v /zc/mysql/datadir-b:/var/lib/mysql 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值