Centos 选用7.4以下的版本(以7.2为例),在通过xshell等工具访问docker里的mysql等容器时,会产生网络错误如下:
使用Navicat远程服务器mysql数据库时报错误:2013-Lost connection to MYSQL server at 'reading for initial communication packet',system error:0
Centos 官网镜像下载地址:https://www.centos.org/download/
国内加速镜像下载地址:http://isoredirect.centos.org/centos/7/isos/x86_64/
Aliyun下载Centos7.8地址(同解决思路3):http://mirrors.aliyun.com/centos/7.8.2003/isos/x86_64/
Centos7下,Docker安装文档 https://docs.docker.com/engine/install/centos/
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
sudo: 以centos下超级管理员的权限执行
No Match for argument: docker...: 之前未安装过docker
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装依赖的包,配置Docker包所在的仓库地址
$ sudo yum install docker-ce docker-ce-cli containerd.io
$ sudo systemctl start docker
$ docker -v
Docker version 19.03.12, build 48a66213fe
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
$ sudo systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:
$ sudo mkdir -p /etc/docker
$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://8g75r3kq.mirror.aliyuncs.com"]
}
EOF
$ sudo systemctl daemon-reload # 重启docker后台线程
$ sudo systemctl restart docker # 重启docker
官方镜像:https://hub.docker.com/_/mysql,可查看安装的版本等信息
$ docker pull mysql:5.7 # :后为版本号,不加默认为最新版本
$ sudo docker images # 查看镜像是否下载好
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 9cfcce23593a 4 weeks ago 448MB
$ docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
ae0c62e2bdaca498bb3acc40fbee05cda617e7821fe2359e5416b5f7793f6488
# 参数说明
--name mysql: 为当前容器命名
-p 3306:3306: 将主机的3306端口(前者)映射到容器的3306端口(后者)
-v /mydata/mysql/log:/var/log/mysql: 将容器配置文件夹(后者)挂载到主机(前者)
-v /mydata/mysql/data:/var/lib/mysql: 将数据文件夹挂载到主机
-v /mydata/mysql/conf:/etc/mysql: 将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root: 初始化root用户的密码
-d mysql:5.7: 启动镜像mysql5.7版本,并以后台方式运行
$ docker ps # 查看docker正在运行中的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ae0c62e2bdac mysql:5.7 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
$ docker exec -it mysql /bin/bash
[root@localhost ~]# docker exec -it mysql /bin/bash
root@ae0c62e2bdac:/# ls
bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
$ whereis mysql
root@ae0c62e2bdac:/# whereis mysql
mysql: /usr/bin/mysql /usr/lib/mysql /etc/mysql /usr/share/mysql
$ exit;
root@ae0c62e2bdac:/# exit;
exit
[root@localhost ~]#
[root@localhost ~]# cd /mydata/
[root@localhost mydata]# ls
mysql
[root@localhost mydata]# cd mysql/
[root@localhost mysql]# ls
conf data log
[root@localhost mysql]#
# 主机配置文件修改,直接影响容器配置文件,主机配置文件相当于“快捷方式”
$ vi /mydata/mysql/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
2.6 重启MySQL容器
$ docker restart mysql
[root@localhost mysql]# docker restart mysql
mysql
[root@localhost mysql]# docker exec -it mysql /bin/bash
root@ae0c62e2bdac:/# cd /etc/mysql/
root@ae0c62e2bdac:/etc/mysql# ls
my.cnf
root@ae0c62e2bdac:/etc/mysql# cat my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
root@ae0c62e2bdac:/etc/mysql#
官方镜像:https://hub.docker.com/_/redis,可查看安装的版本等信息
$ docker pull redis
$ mkdir -p /mydata/redis/conf
$ touch /mydata/redis/conf/redis.conf
$ docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
$ docker exec -it redis redis-cli
[root@localhost conf]# docker exec -it redis redis-cli
127.0.0.1:6379> set a b
OK
127.0.0.1:6379> get a
"b"
127.0.0.1:6379> exit
[root@localhost conf]#
$ vi redis.conf
[root@localhost conf]# pwd
/mydata/redis/conf
[root@localhost conf]# ls
redis.conf
[root@localhost conf]# vi redis.conf
# 添加如下内容
appendonly yes
[root@localhost conf]# docker restart redis
redis
更多配置参考:https://raw.githubusercontent.com/antirez/redis/5.0/redis.conf
$ docker update mysql --restart=always
$ docker update redis --restart=always
转载请标明来源。