如下是针对centos7容器的安装方法【dockerHub现在是centosos8,但是centos8目前宝塔安装还不是很顺】
PULL 一个centos镜像
docker pull centos:centos7
通过centos镜像启动一个名未baota的容器
docker run -i -t -d --name baota -p 120:20 -p 121:21 -p 180:80 -p 1443:443 -p 188:888 -p 9888:8888 --privileged -v ~/home/www:/www centos:centos7 /sbin/init
主要参数说明:
--name docker容器名称
-p端口转发 宿主机端口:docker容器端口
--privileged殊授权[看到网上很多老贴这个参数后面都跟了=true 可是我的后面跟 =true总是不对](容器内部的写权限)很重要
-v 持久化 (保存修改后的内容) 不设置则容器停止后容器内部的修改会丢失
~/home/www:/www 将宿主机 ~/home/www映射到容器中的/www目录
/sbin/init 容器内部服务自启
进入容器和相关操作
进入容器:使用docker ps 查看容器ID或则直接跟容器名
docker exec -it [容器id] /bin/bash
docker exec -it baota /bin/bash
安装宝塔
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
踩坑
坑一、启动容器访问没有任何问题,提交生成新镜像重新启动后能访问过了一会儿无法访问(或则一直都无法访问),考虑是否被防火墙拦截了
验证方法:
在宿主机curl 宝塔面板 如果返回 类似curl: (56) Recv failure: Connection reset by peer则可能是被拦截
curl http://127.0.0.1:9888/26eeee45
curl: (56) Recv failure: Connection reset by peer
解决方案: 在容器中 添加放开规则或则关闭防火墙(以下为防火墙放开端口) 端口号也是针对容器内部的端口
#添加防火墙放开端口
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=888/tcp --permanent
#如果出现以下报错 检查 --privileged殊授权参数 [看到网上很多老贴这个参数后面都跟了=true 可是我的后面跟 =true总是不对](容器内部的写权限)很重要
System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down
#更新防火墙 规则
firewall-cmd --reload。
如果不出意外完成防火墙放开所有需要的端口规则即可访问和正常使用
坑二、当我打包后移植到我的虚拟机(1核2g)启动发现mysql居然无法启动起来 从宝塔面板重启提示重启成功,但是依然是停止状态
于是命令行重启看具体情况
/etc/init.d/mysqld restart
#结果出现如下错误
ERROR! MySQL server PID file could not be found!
Starting MySQL. ERROR! The server quit without updating PID file (/www/server/data/28d48c9b542c.pid).
无赖网上给的关于这个的处理方法均无效,所以就撸了一下mysql日志(默认错误日志目录/www/server/data/*.err)
191214 6:28:40 [Note] Plugin 'FEDERATED' is disabled.
191214 6:28:40 InnoDB: The InnoDB memory heap is disabled
191214 6:28:40 InnoDB: Mutexes and rw_locks use GCC atomic builtins
191214 6:28:40 InnoDB: Compressed tables use zlib 1.2.11
191214 6:28:40 InnoDB: Using Linux native AIO
191214 6:28:40 InnoDB: Initializing buffer pool, size = 1.0G
InnoDB: mmap(1098907648 bytes) failed; errno 12
191214 6:28:40 InnoDB: Completed initialization of buffer pool
191214 6:28:40 InnoDB: Fatal error: cannot allocate memory for the buffer pool
191214 6:28:40 [ERROR] Plugin 'InnoDB' init function returned error.
191214 6:28:40 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
191214 6:28:40 [ERROR] Unknown/unsupported storage engine: InnoDB
191214 6:28:40 [ERROR] Aborting
191214 6:28:40 [Note] /www/server/mysql/bin/mysqld: Shutdown complete+
找到关键错误 Fatal error: cannot allocate memory for the buffer pool 百度了一下有人说是内存分配问题然后打开mysql配置发现innodb_buffer_pool_size默认分配了1024M,很明显我的宿主机才2048跑系统再跑docker肯定所剩不住1024M,遂改为50M然后重启docker,到此完美运行
辅助方法
忘记宝塔默认账号密码 下面命令二选一
#容器中执行以下命令
bt default
#宿主机执行
docker exec baota bt default
如需要移植则需要童鞋们自己研究一下commit 打包或则dockerHUB移植了