静茹docker容器的几种方法_docker安装踩坑

害,docker安装+配置花费了我接近两天时间

起因是这样的,项目开发需要docker来作为运行容器,第一次项目需求的时候,大佬建议我安装一个docker后续方便统一环境。本来呢,我以为是很简单的一件事,不就是去docker官网下载一个社区版本,还很良心的是一个安装包,省去了一大堆活,高高兴兴地下载了接近1G。哦豁,安装完,点击启动,立刻报错(重启、重新安装都没能解决)。没有截图,只能放我之前搜索的关键词了。

Unable to start the VM VBoxManage.exe: error: Raw-mode isunavailable courtesy of Hyper-V. (VERR_SUPDRV_NO_RAW_MODE_HYPER_V_ROOT) VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole

网上找到的解决办法有以下几种

  1. 启用windows的Hype-v
  2. 启用主板(bios)上的虚拟化开关
  3. 在PoweShell下面运行一些命令(重启虚拟机及设置某些值)

经过差不多5,6次的尝试,我放弃了这些解决方案。

柳暗花明,我找到了另外一款docker的安装方法,即使用docker Toolbox进行安装

安装过程其实也不算顺利。第一 要注意必须关掉之前开启的Hype选项(安装完成后好像还会自动开启?)第二 生成的Docker QuickStart Terminal 必须 鼠标右键图标, 将目标 栏里的值进行更改,更改的依据为 前面是之前安装的时候git的bash地址(或者自己之前已经下载的也行),后面的值是Docker Toolbox start.sh的地址。类似下图

7702b92f086401fddc34d856f547e191.png

以上是安装的解决方案,这个时候你可能会遇到一些小坑,不过问题不大了 ---对于安装来说

当你愉快地运行创建容器的命令,并且创建成功了!不要激动,后面还有痛苦的事。

IDE导入项目(导入项目还有几个要注意的,会归到同一系列).........

项目采用的中间件是zookeeper,默认端口是2181.发现运行项目一直会报错。
socket error occurred: kubernetes.docker.internal/127.0.0.1:2181: Connection refused: no further information

当时经过多次谷歌之后,排查的思路如下

  1. 容器有启动吗
  2. 端口设置正确吗,特别是映射关系
  3. 项目设置连接加密了吗
  4. 连接得上吗(DNS问题?其他连接问题?)

询问了身边的大佬们,他们没有设置连接加密,他们可以直接用docker安装包安装docker的(羡慕啊)。

最容易搜索得到的答案是没有配置好DNS,对DNS进行修改就能解决了,这里放个搜索的关键词,方便后续同学能通过关键词找到这篇文章,帮助解决问题。(Will not attempt to authenticate using SASL (unknown error))
按照我排错后的反思,我与修改dns的答主所处的位置不同,他是有启动过项目了,而我没有启动完成,因此他的解决方案并不太适合我但我经过询问大佬,发现大佬的DNS文件确实是与我不同,他们的docker会为他们配置好两个dns,因此我也进行了设置。

da162f43382dc5fbab2d557101a94fd6.png

排查容器有无启动:一开始我是用docker-compose直接运行yml脚本,在命令窗口是可以看到容器运行的消息的,并且没有报错,因此就没往这方面想,不过也产生了对docker是否内部出现错误,但是报正常运行的想法(概率极小罢了)。

端口设置正确吗,确实是我花费了大部分排查的地方,通过不断地运行命令,根据搜索结果运行docker命令,,确实我的端口设置是没错的,包括映射。现在回想起来,其实是对docker了解不深,docker其实是可以看作是个虚拟机,能进入容器里运行linux命令。在linxu下能做许许多多检验的事情,包括检验容器应用是否正常运行,端口和端口映射是否设置正确。我当时就没能想到这件事,反反复复地新增容器,删除容器,删除虚拟机等操作。那其实也有部分好处的,我由新增和删除容器的命令,发现docker有个默认访问的ip地址,这就让我留意了起来,这个ip地址是拿来干嘛的?我开始鼓捣这个ip地址,居然能ping通??

我的想法开始微妙起来,开始尝试连接这个ip地址上我已添加的容器端口,如Mysql的端口3306。

居然!居然!连上了!那就意味着有了一个关键性的解决方案!连接docker的ip地址!用DNS做转换?如将127.0.0.1 映射到 这个ip地址?看似是可以的,但是怎么保证docker的ip地址不会改变呢?

联想到,上学期的云计算配置过虚拟机的静态IP,可不可以用类似的方法呢?行不通,上学期的虚拟机是Vmware 并不是VitrulBox。

不过仔细查找ViturlBox的配置,很容易在网络设置选项中,找到一个端口转发的东西

fd73f9a989d01fb467d2e0b39a72b2d9.png

1233c53b0c5f85c60046ac73aebd5015.png

这里的主机IP和子系统IP留空,表示主机IP默认地址(localhos或127.0.0.1),任意子系统IP,将主机端口转发到子系统端口,就这样解决了!

再次尝试Mysql连接和项目构建,发现已经能连的上数据库并且项目开始进行下一步构建。

本次docker环境配置就算是圆满解决了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值