Docker日常

启动报错

OS:CentOS7

安装docker

yum install docker -y

启动

systemctl start docker 或者 service docker start

报错

Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

检查报错原因

journalctl -amu docker

Error starting daemon: SELinux is not supported with the overlay2 graph driver on this kernel. Either boot into a newer kernel or disable selinux in doc

看起来是selinux的原因,关闭selinux也不能解决,需要修改docker的配置

#将/etc/sysconfig/docker中的--selinux-enabled 改为 --selinux-enabled=false

echo OPTIONS=\'--selinux-enabled=false --log-driver=journald --signature-verification=false\' >> /etc/sysconfig/docker

修改完成后启动成功


部署与删除

部署MySQL

#下载到本地(也可以通过docker run的时候直接下载,所以下面的语句可以不用执行)

docker pull mysql:5.7

#不写版本号的话,会下载最新版的,现在会直接下载8.0

查看下载的镜像

docker images

启动MySQL

mkdir -p /data/mysql/data /data/mysql/logs /data/mysql/conf

cd /data/mysql

#在docker run的时候下载镜像

docker search mysql

docker run -p 3306:3306 --name zabbix_mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=密码 -d mysql:5.7

# -d部分必须要对标红框出的内容,比如mysql-cluster一定要写成mysql/mysql-cluster,否则会报错找不到这个repository

# -v参数是作为映射使用,此处并没有使用外部数据和外部参数来启动

-v 外部路径:内部路径

#启动之后通过docker ps -a可以查看docker启动的所有进程

关闭进程

docker stop 容器名

从容器中删除(通过docker ps -a查看容器ID)

docker rm 容器ID

#删除全部容器

docker rm $(docker ps -a -q)

docker rmi 镜像ID

#删除所有镜像

docker rmi $(docker images -q)

#无法在系统中直接进入mysql,使用客户端连接

重命名

docker rename 原容器名 现容器名

docker rename zabbix_mysql mysql

查询日志

docker logs mysql

重启

docker restart mysql


使用外部参数和数据启动MySQL

docker run --name mysql-server -t \

      -p 3306:3306 \

      --privileged=true \

      -v /data/mysql/mysql3306/data:/var/lib/mysql \

      -e MYSQL_DATABASE="zabbix" \

      -e MYSQL_USER="zabbix" \

      -e MYSQL_PASSWORD="zabbix" \

      -e MYSQL_ROOT_PASSWORD="zabbix" \

      -d mysql:5.7  \

--character-set-server=utf8 --collation-server=utf8_bin

部署的时候,外部的mysql需要处于关闭状态,否则会报错

--privileged=true确保内部具有root权限,否则docker内的root对于外部的mysql来说只是一般权限

-v /data/mysql/mysql3306/:/etc/mysql/conf.d 这是2个配置文件的路径,因为我本身的配置文件里面有相当多的特殊设置,所以此处没有挂载配置,如果需要挂载配置,最好单独写一份能匹配的配置


搭建zabbix-server

--link用法

--link 容器名:alias

之前已经把mysql的名字由zabbix_mysql改为了mysql,因此--link写为 mysql:mysql而不是--link zabbix_mysql:mysql

[root@zabbix ~]# cat zabbix.sh

#!/bin/bash

docker run --name mysql-server -t \

      -e MYSQL_DATABASE="zabbix" \

      -e MYSQL_USER="zabbix" \

      -e MYSQL_PASSWORD="zabbix" \

      -e MYSQL_ROOT_PASSWORD="zabbix" \

      -d mysql:5.7  \

--character-set-server=utf8 --collation-server=utf8_bin

docker run --name zabbix-server-mysql -t \

      -e DB_SERVER_HOST="mysql-server" \

      -e MYSQL_DATABASE="zabbix" \

      -e MYSQL_USER="zabbix" \

      -e MYSQL_PASSWORD="zabbix" \

      -e MYSQL_ROOT_PASSWORD="zabbix" \

      --link mysql-server:mysql \

      -p 10051:10051 \

      -d zabbix/zabbix-server-mysql:latest

docker run --name zabbix-web-nginx-mysql -t \

      -e DB_SERVER_HOST="mysql-server" \

      -e MYSQL_DATABASE="zabbix" \

      -e MYSQL_USER="zabbix" \

      -e MYSQL_PASSWORD="zabbix" \

      -e MYSQL_ROOT_PASSWORD="zabbix" \

      --link mysql-server:mysql \

      --link zabbix-server-mysql:zabbix-server \

      -p 80:80 \

      -d zabbix/zabbix-web-nginx-mysql:latest


安装docker-compose

curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

验证

docker-compose --version


虚拟机下的x509报错

#这是一个证书报错,走公司的虚拟机不会出这个报错,走自己PC的虚拟机就会

报错大概就是下面的样子

docker: error response from daemon: get https://registry-1.docker.io/v2/: x509: certificate signed by unknown authority.

解决方法:

cd ~

openssl genrsa -out client.key 4096

openssl req -new -x509 -text -key client.key -out client.cert

#然后进入目录

cd /etc/docker/certs.d

#重新回去建路径

mkdir -p /etc/docker/certs.d/registry.docker.com

cp ~/client.* /etc/docker/certs.d/registry.docker.com/

service docker restart


247报错

启动报错大致如下:

...container_linux.go:247 ...write parent: broken pipe...

使用命令journalctl -u docker.service

检测可以发现kernel字样,推测原因为内核过旧

#查看当前内核版本如下

uname -r

3.10.0-327.el7.x86_64

执行升级并重启后内核版本

uname -r

3.10.0-957.10.1.el7.x86_64

经测试可以正常运行


容器内部无法使用vim/vi

apt-get update

apt-get install -y vim


原生仓库下载太慢的问题

#改成国内仓库源

vim /etc/docker/daemon.json

{"registry-mirrors": ["https://k0rfl0e1.mirror.aliyuncs.com"]}

#echo {\"registry-mirrors\": [\"https:\/\/k0rfl0e1.mirror.aliyuncs.com\"]} > /etc/docker/daemon.json

systemctl daemon-reload

systemctl restart docker


Docker报错:WARNING: IPv4 forwarding is disabled. Networking will not work.

 sysctl net.ipv4.ip_forward

如果结果为1则正常,否则

vi /usr/lib/sysctl.d/00-system.conf

添加下面这行

net.ipv4.ip_forward=1

然后重启network


Docker网络

docker network ls

删除不想要的桥接网络

docker network rm 7d00c730a668

删除该桥接网卡

ifconfig br-7d00c730a668 down

brctl delbr br-7d00c730a668

#确认该网卡已经删除

brctl show 

你可能感兴趣的:(Docker日常)