docker mysql8.0镜像出现的问题以及解决方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker mysql8.0镜像出现的问题以及解决方法相关的知识,希望对你有一定的参考价值。

参考技术A 本次安装,没有选择现成的镜像,从docker的github上,把dockerfile搞到本地,然后build镜像。如果不出意外的话,步骤很简单。

dockerfile文件在此: https://github.com/docker-library/mysql/blob/master/8.0/Dockerfile.debian

把dockerfile:Dockerfile.debian复制也好,wget也好,搞到本地,然后执行:

经过漫长的等待,期待,docker给我报了个错误。截图如下:

可见,报错内容为:目录不存在,不过/var/lib/docker/tmp/docker-builderxxxxx这个目录,是build在运行时的临时目录,build完成后,就会被删掉。所以,在build的时候,这里有没有docker-builderxxxxx这个目录,目录下有没有config,我也不知道。
但是问题还是要解决的,看一下dockerfile的内容

这样,把dockerfile里需要的内容,都手动的放到当前目录里,在此build。就可以通过了。

为什么直接执行build,会提示在tmp目录下找config呢?我觉得是build的时候,tmp目录下的docker-builderxxxxx目录会映射到当前目录。报的这个错误其实就是从当前目录找config文件,当前目录没有,就去映射的docker-builderxxxxx目录下找,而docker-builderxxxxx目录下因为我不知道的原因也没有,所以就报错了。只需要确保当前目录下有dockerfile里需要的文件就可以解决了。

Windows10环境下制作SpringBoot项目的Docker镜像以及与宿主机上MySQLRedis进行桥接通信

软件版本

  • OS: Windows10
  • IDEA: 2020.3
  • JDK: 8
  • MySQL: 5.7
  • WSL:Linux version 5.10.16.3-microsoft-standard-WSL2 (oe-user@oe-host) (x86_64-msft-linux-gcc (GCC) 9.3.0, GNU ld (GNU Binutils) 2.34.0.20200220) #1 SMP Fri Apr 2 22:23:49 UTC 2021
  • Docker Server:

一、IDEA配置Docker

1,暴露Docker后台

Docker Desktop的设置中勾选下图红色长框中的选项。

2,IDEA中配置连接Docker后台

将上图中的URL填写到下图箭头所指处。

3,编写Dockerfile文件

在项目中src/main创建docker文件夹,在该文件夹下创建Dockerfile文件。内容为:

FROM java:8

MAINTAINER Chambocang

WORKDIR /

ADD iotProject.jar iotProject.jar

RUN bash -c 'touch /iotProject.jar'

EXPOSE 8081

ENTRYPOINT ["java","-Dfile.encoding=UTF-8","-jar","/iotProject.jar"]

4,项目镜像和容器参数配置


右键点击Dockerfile文件中Run on Docker按钮,再点击编辑文件菜单选项。依次填写好下图中的序号标出的参数。

5,启动容器


项目中包含数据库和Redis的使用,其驱动配置中包含的IP都是127.0.0.1,该IP此时表示容器的环回地址,和宿主机上的监听127.0.0.1的MySQL、Redis两码事。因此容器需要访问宿主机上的MySQL、Redis,必须知道能够和宿主机的127.0.0.1通信的IP地址,因此就涉及Docker网络的知识。

二、开通宿主机上MySQL、Redis的IP访问权限

具体知识自行搜索官方WSL2网络相关讲解,该博客给出答案。

1,查询docker0网卡信息

2,项目配置文件替换

将host和URL都改为上述IP地址。

3,修改MySQL IP访问权限

mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql>flush privileges;

语句含义如下。

// 其中各字符的含义:
// *.* 对任意数据库任意表有效
// "root" "123456" 是数据库用户名和密码
// '%' 允许访问数据库的IP地址,%意思是任意IP,也可以指定IP
// flush privileges 刷新权限信息

4,修改Redis IP访问权限

添加上述IP地址到bind行。

三、实战结果

在浏览器中输入docker0的IP地址以及访问接口,得到如下图之结果。

以上是关于docker mysql8.0镜像出现的问题以及解决方法的主要内容,如果未能解决你的问题,请参考以下文章

在docker上安装MySQL和Redis

Docker安装Mysql8.0,并配置忽略大小写

Docker安装Mysql8.0,并配置忽略大小写

构建MySQL8.0镜像

Docker的简单应用—>使用Docker安装Mysql8.0

Docker的简单应用—>使用Docker安装Mysql8.0