前言
遇到问题
Centos 选用7.4以下的版本(以7.2为例),在通过xshell等工具访问docker里的mysql等容器时,会产生网络错误如下:
解决思路
- 网友说要找到配置文件 my.cnf,中的bind-address = 127.0.0.1注释掉,但是发现自己并没有写这个(这个的意思是只能本机连接,不允许别人连接),但是并没有用。
- 配置文件my.cnf,中[mysqld]部分的参数,在配置后面建立一个新行,添加下面这个参数:skip-name-resolve(禁用dns解析)保存文件并重启MySQL,问题还是没有解决。
- 有人说可能是网络问题。顺着这个思路去找,先telnet docker的宿主机端口是通的,然后在宿主机里面telnet 容器端口,就不通了。这就基本确定是网络问题了。然后去查这方面的资料,说centos7.4以上版本对docker支持友好,就换了宿主机的系统,换成centos7.8(http://mirrors.aliyun.com/centos/7.8.2003/isos/x86_64/),果然就好了。到此问题就解决了。
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/
1. 安装Docker
Centos7下,Docker安装文档 https://docs.docker.com/engine/install/centos/
1.1 卸载系统之前的Docker
$ 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
1.2 设置仓库
$ 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包所在的仓库地址
1.3 安装Docker引擎
$ sudo yum install docker-ce docker-ce-cli containerd.io
1.4 启动Docker
$ sudo systemctl start docker
$ docker -v
Docker version 19.03.12, build 48a66213fe
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
1.5 设置开机自启动
$ sudo systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
1.6 配置Docker镜像加速
在阿里云上找到国内镜像的配置:
控制台 》产品与服务 》容器镜像服务 》 镜像加速器
通过修改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
1.7 文件目录挂载(类似快捷方式)
2. 安装MySQL5.7
官方镜像:https://hub.docker.com/_/mysql,可查看安装的版本等信息
2.1 下载镜像文件
$ docker pull mysql:5.7 # :后为版本号,不加默认为最新版本
$ sudo docker images # 查看镜像是否下载好
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 9cfcce23593a 4 weeks ago 448MB
2.2 创建容器Container并启动
每run一下就启动一个容器,容器与容器间是隔离的状态
$ 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
2.3 进入容器内部
$ docker exec -it Contatiner_ID/Container_Name bash #进入容器终端并且保留为容器终端的输入形式(-it和bash的结合作用)
官方解释:
exec: Run a command in a running container(在运行的容器中运行命令)
exec -i: --interactive(相互作用的) Keep STDIN open even if not attached(即使没有连接,也要保持STDIN打开)
exec -t: --tty Allocate a pseudo-TTY(分配一个 冒充的终端设备)
$ docker exec -it mysql /bin/bash # 进入容器终端并且的保留为容器终端的输入形式(-it和bash的结合作用)
官方解释:
exec: Run a command in a running container(在运行的容器中运行命令)
exec -i: --interactive(相互作用的) Keep STDIN open even if not attached(即使没有连接,也要保持STDIN打开)
exec -t: --tty Allocate a pseudo-TTY(分配一个 冒充的终端设备)
/bin/bash 进入容器名为mysql的Linux系统的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 ~]#
2.4 查看挂载文件夹
[root@localhost ~]# cd /mydata/
[root@localhost mydata]# ls
mysql
[root@localhost mydata]# cd mysql/
[root@localhost mysql]# ls
conf data log
[root@localhost mysql]#
# 主机配置文件修改,直接影响容器配置文件,主机配置文件相当于“快捷方式”
2.5 修改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#
3. 安装Redis最新版
官方镜像:https://hub.docker.com/_/redis,可查看安装的版本等信息
3.1 下载 redis 镜像
$ docker pull redis
3.2 创建配置文件
如果不预先创建好外部文件,在执行启动容器的run命令时创建的是目录文件夹不是文件!!!
$ mkdir -p /mydata/redis/conf # 创建目录
$ touch /mydata/redis/conf/redis.conf # 创建文件
3.3 启动容器
$ 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
3.4 运行 Redis
$ 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]#
3.5 持久化Redis
$ 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
4. Elasticsearch
4.1 下载镜像
[root@OKGO ~]# docker pull elasticsearch:7.4.2
7.4.2: Pulling from library/elasticsearch
d8d02d457314: Pull complete
f26fec8fc1eb: Pull complete
8177ad1fe56d: Pull complete
d8fdf75b73c1: Pull complete
47ac89c1da81: Pull complete
fc8e09b48887: Pull complete
367b97f47d5c: Pull complete
Digest: sha256:543bf7a3d61781bad337d31e6cc5895f16b55aed4da48f40c346352420927f74
Status: Downloaded newer image for elasticsearch:7.4.2
docker.io/library/elasticsearch:7.4.2
[root@OKGO ~]# docker pull kibana:7.4.2
7.4.2: Pulling from library/kibana
d8d02d457314: Already exists
bc64069ca967: Pull complete
c7aae8f7d300: Pull complete
8da0971e3b41: Pull complete
58ea4bb2901c: Pull complete
b1e21d4c2a7e: Pull complete
3953eac632cb: Pull complete
5f4406500758: Pull complete
340d85e0d1c7: Pull complete
1768564d16fb: Pull complete
Digest: sha256:355f9c979dc9cdac3ff9a75a817b8b7660575e492bf7dbe796e705168f167efc
Status: Downloaded newer image for kibana:7.4.2
docker.io/library/kibana:7.4.2
[root@OKGO ~]# free -m
total used free shared buff/cache available
Mem: 1819 1119 212 14 486 502
Swap: 2047 303 1744
[root@OKGO ~]#
4.2 安装及配置
[root@OKGO ~]# mkdir -p /mydata/elasticsearch/config
[root@OKGO ~]# mkdir -p /mydata/elasticsearch/data
[root@OKGO ~]# echo "http.host:0.0.0.0">>/mydata/elasticsearch/config/elasticsearch.yml
[root@OKGO ~]# cd /mydata/
[root@OKGO mydata]# cd elasticsearch/
[root@OKGO elasticsearch]# cd config/
[root@OKGO config]# ll
total 4
-rw-r--r--. 1 root root 18 Sep 13 11:44 elasticsearch.yml
[root@OKGO config]# cat elasticsearch.yml
http.host:0.0.0.0
$ docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
问题1
ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but found [VALUE_STRING]];
参考文章,修改 Elastic 安装目录的config/elasticsearch.yml文件,去掉network.host的注释,将它的值改成0.0.0.0。
这个错就是参数的冒号前后没有加空格,加了之后就好:network.host: 0.0.0.0
问题2
"Caused by: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes"
使用命令:
[root@OKGO elasticsearch]# chmod -R 777 /mydata/elasticsearch/
[root@OKGO elasticsearch]# ll
total 0
drwxrwxrwx. 2 root root 31 Sep 13 12:15 config
drwxrwxrwx. 3 root root 19 Sep 13 12:21 data
drwxrwxrwx. 2 root root 6 Sep 13 12:04 plugins
[root@OKGO elasticsearch]#
4.3 安装Kibana
$ docker run --name kibana -p 5601:5601 \
-e ELASTICSEARCH_HOSTS=http://192.168.107.130:9200 \
-d kibana:7.4.2
$ docker logs kibana
4.4 安装ik分词器
[root@OKGO mydata]# cd elasticsearch/
[root@OKGO elasticsearch]# ls
config data plugins
[root@OKGO elasticsearch]# cd plugins/
[root@OKGO plugins]# docker exec -it elasticsearch /bin/bash
[root@25344902477f elasticsearch]# wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip
bash: wget: command not found
[root@25344902477f elasticsearch]# cd ..
[root@25344902477f share]# exit;
exit
read unix @->/var/run/docker.sock: read: connection reset by peer
[root@OKGO plugins]# wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip
...
[root@OKGO plugins]# unzip elasticsearch-analysis-ik-7.4.2.zip
[root@OKGO plugins]# mv /mydata/elasticsearch/plugins/* /mydata/elasticsearch/plugins/ik/
mv: cannot move ‘/mydata/elasticsearch/plugins/ik’ to a subdirectory of itself, ‘/mydata/elasticsearch/plugins/ik/ik’
[root@OKGO plugins]# ll
total 4
drwxr-xr-x. 3 root root 4096 Sep 13 23:24 ik
[root@OKGO plugins]# cd ik/
[root@OKGO ik]# ll
total 5832
-rw-r--r--. 1 root root 263965 May 6 2018 commons-codec-1.9.jar
-rw-r--r--. 1 root root 61829 May 6 2018 commons-logging-1.2.jar
drwxr-xr-x. 2 root root 4096 Oct 7 2019 config
-rw-r--r--. 1 root root 54643 Nov 4 2019 elasticsearch-analysis-ik-7.4.2.jar
-rw-r--r--. 1 root root 4504487 Nov 4 2019 elasticsearch-analysis-ik-7.4.2.zip
-rw-r--r--. 1 root root 736658 May 6 2018 httpclient-4.5.2.jar
-rw-r--r--. 1 root root 326724 May 6 2018 httpcore-4.4.4.jar
-rw-r--r--. 1 root root 1805 Nov 4 2019 plugin-descriptor.properties
-rw-r--r--. 1 root root 125 Nov 4 2019 plugin-security.policy
[root@OKGO ik]# docker exec -it elasticsearch /bin/bash
[root@25344902477f elasticsearch]# pwd
/usr/share/elasticsearch
[root@25344902477f elasticsearch]# cd plugins/
[root@25344902477f plugins]# ls
ik
[root@25344902477f plugins]# cd ../
[root@25344902477f elasticsearch]# ls
LICENSE.txt NOTICE.txt README.textile bin config data jdk lib logs modules plugins
[root@25344902477f elasticsearch]# cd bin/
[root@25344902477f bin]# elasticsearch-plugin -h
A tool for managing installed elasticsearch plugins
Commands
--------
list - Lists installed elasticsearch plugins
install - Install a plugin
remove - removes a plugin from Elasticsearch
Non-option arguments:
command
Option Description
------ -----------
-h, --help show help
-s, --silent show minimal output
-v, --verbose show verbose output
[root@25344902477f bin]# elasticsearch-plugin list
ik
[root@25344902477f bin]#
5. 安装Nginx(为自定义词库创建)
-
随便启动一个nginx实例,只是为了复制出配置
- docker run -p 80:80 --name nginx -d nginx:1.10
-
将容器内的配置文件拷贝到当前目录;docker container cp nginx:/etc/nginx . (后面还有个点,且点前面有空格)
-
修改文件名称:mv nginx conf 把这个conf移动到/mydata/nginx下
[root@OKGO mydata]# mv nginx conf
[root@OKGO mydata]# ls
conf elasticsearch mysql redis
[root@OKGO mydata]# mkdir nginx
[root@OKGO mydata]# mv conf nginx/
[root@OKGO mydata]# ls
elasticsearch mysql nginx redis
[root@OKGO mydata]# cd nginx/
[root@OKGO nginx]# ls
conf
[root@OKGO nginx]#
-
终止原容器:docker stop nginx
-
删除容器 docker rm 容器id
-
创建新的nginx
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10
前提条件:
[root@OKGO nginx]# pwd
/mydata/nginx
- 访问 主机地址
在/mydata/nginx/html中创建index.html
- 创建分词文本
mkdir es
vi fenci.txt
[root@OKGO nginx]# cd html/
[root@OKGO html]# ls
[root@OKGO html]# vi index.html
[root@OKGO html]# ls
index.html
[root@OKGO html]# pwd
/mydata/nginx/html
[root@OKGO html]# mkdir es
[root@OKGO html]# cd es/
[root@OKGO es]# vi fenci.txt
[root@OKGO es]#
访问:
http://192.168.80.133/es/fenci.txt
- 注意问题:我使用的docker需要像之前安装kibana找到ealsticsearch一样,需要得到docker帮它创建的ip,不能直接使用主机ip修改IKAnalyzer.cfg.xml
如图
这样就可以配置成功。
- 新的词汇在下面路径添加
[root@OKGO config]# cd ../
[root@OKGO ik]# cd /mydata/nginx/html/es/
[root@OKGO es]# ls
fenci.txt
6. 设置随Docker启动
$ docker update mysql --restart=always
$ docker update redis --restart=always
$ docker update elasticsearch --restart=always
$ docker update kibana --restart=always
$ docker update nginx --restart=always
移除并更新
[root@OKGO ik]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bbfddb07ee0f kibana:7.4.2 "/usr/local/bin/dumb…" 20 hours ago Up 20 hours 0.0.0.0:5601->5601/tcp kibana
25344902477f elasticsearch:7.4.2 "/usr/local/bin/dock…" 20 hours ago Up 9 hours 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch
25ce0a7c7ab3 redis "docker-entrypoint.s…" 2 months ago Up 20 hours 0.0.0.0:6379->6379/tcp redis
92823e142fcb mysql:5.7 "docker-entrypoint.s…" 2 months ago Up 20 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
[root@OKGO ik]# docker stop elasticsearch
elasticsearch
[root@OKGO ik]# docker rm elasticsearch
elasticsearch
[root@OKGO ik]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bbfddb07ee0f kibana:7.4.2 "/usr/local/bin/dumb…" 20 hours ago Up 20 hours 0.0.0.0:5601->5601/tcp kibana
25ce0a7c7ab3 redis "docker-entrypoint.s…" 2 months ago Up 20 hours 0.0.0.0:6379->6379/tcp redis
92823e142fcb mysql:5.7 "docker-entrypoint.s…" 2 months ago Up 20 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
[root@OKGO ik]#
转载请标明来源。