1.docker部署问题
docker 启动失败
docker 启动 提示Job for docker.service failed because start of the service was attempted too often.
- 原因
- /etc/docker/daemon.json 内容没有配置好
- 方案
- 修复/daemon.json, 注意 "data-root": "/data/docker"的路径要根据实际情况来,不同电脑不一样,修改后会丢失原来的镜像信息,切回来即可。
{
"registry-mirrors" : [
"https://jkfdsf2u.mirror.aliyuncs.com",
"https://registry.docker-cn.com"
],
"insecure-registries" : [
"docker-registry.zjq.com"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "10"
},
"data-root": "/data/docker"
}
docker exec执行失败
OCI runtime exec failed: exec failed: unable to start container process: exec: "bash"
- 原因
- 不支持 bash启动 ,改用sh
- 方案
- docker exec -it container_name sh
用docker部署的nuxt前端项目3000 端口外网无法访问
- 原因
- nuxt.config.js 配置里面使用的是默认localhost配置
- 方案
- 在nuxt.config.js 配置里 新增下面配置,指明0.0.0.0 所有服务器都可以访问
server: {
port: 3000,
host: '0.0.0.0',
timing: false
}
nginx 部署的返向代理 ,但是浏览器无法访问
upstream ssrPages { server 127.0.0.1:3000; }
- 原因
- docker 容器通过网桥 到访问到宿主机,所以127.0.0.1 是无法访问到宿主
- 方案
- 需要使用网桥 的ip,或者直接公网的ip 做方向代理,通过ipconfig 查看网桥的ip
upstream ssrPages {
server 172.17.0.1:3000;
}
前端项目提示cdn找不到
项目做docker容器化后,cdn无法访问
- 原因
- cdn单独 include,忘记修改 alias /html/cdn; 对应的地址
- 方案
- 由于img 也使用的cdn ,也要一样的修改
alias /html/cdn;
修改为下面完整配置
alias /usr/share/nginx/html/cdn;
docker images查看镜像没有实时刷新
- 当推送的新的镜像上私有仓库(相同的名称+版本号),使用docker images时 显示的create date并不准确。有些显示 Less than a second ago,有些显示 3 days ago,但是晚点看有变回 Less than a second ago
- 原因
- 可能是docker 更新需要定时处理
- 方案
- 晚点再查看,如果要确认版本,最好看ID
运行docker导致cpu占满
启动docker服务器后,运行node+mongodb服务器时,会导致整个linux服务cpu拉满,其他服务都不可用
- 原因
- 后台一直输出数据连接不上,连接不上后,会一直重连,导致资源耗尽
- 方案
- 由于docker内部的不同应用的直接使用的是原来的端口,而不是重新映射的端口。如原来是容器里mongodb端口为 是 2886 则node也用2886访问mongodb
前端nuxt项目启动失败
启动打印 2023-05-13 10:42:14,650 ERROR 2075 [app_worker] server got error: bind EADDRNOTAVAIL 10.7.123.127:9001, code: EADDRNOTAVAIL
- 原因
- 由于配置
config.cluster = {
listen: {
port: 9001,
hostname: "10.7.123.127",
},
};
直接指定了 10.7.123.127的ip,但是docker容器里又识别这里这个ip
- 方案
- 把ip 10.7.123.127 改成 0.0.0.0
使用jenkis打包命令发布 总是代码不生效
- 原因
npm -v
rm -rf package-lock.json version.tar.gz ./dev_ims_version_pc_egg
cnpm install
cd ..
cp -r dev_ims_version_pc_egg version_egg
构建的时候 使用新文件夹 version_egg,每次重新复制前,应该先删除,再复制,因为默认是提示是否要覆盖,而不是覆盖
- 方案
- 在cp -r dev_ims_version_pc_egg version_egg 前面 先执行 rm -rf version_egg
版本管理系统 提交代码总是提示失败
eslint . xxxxxx
husky pre-commit hook exited with code 1 (error)
- 原因
- 项目使用了eslint ,必须满足指定的格式化才可以
- 方案
- 在 package.json 找到 formatter 格式化命令,提交前执行 npm run formatter
全局的docker-compose命令无法使用
- 原因
- 存放的docker-compose文件变成了只有9k左右,正常应该是20m,
可能是直接执行curl -L get.daocloud.io/docker/comp… -s
-uname -m` > /usr/local/bin/docker-compose 使用该命令下载的 docker-compose文件 有问题
- 存放的docker-compose文件变成了只有9k左右,正常应该是20m,
可能是直接执行curl -L get.daocloud.io/docker/comp… -s
- 方案
- 建议把之前备份好另外一台的docker-compose 直接上传使用,并且如果全局无效,需要在 vi ~/.bashrc 加入 全局环境路径
export PATH="$PATH:/usr/local/bin"
source ~/.bashrc
docker执行pull 拉取镜像失败
执行 docker pull www.test.cn:5000/nginx:3 提示
Error response from daemon: Head "www.test.cn:5000/nginx/v2/yl…": no basic auth credentials
- 原因
- 当前docker用户未登陆
- 方案
#先执行登录
docker login www.test.cn:5000
#用户名
docker
#密码
123123
docker执行pull 拉取镜像失败
执行 docker pull www.test.cn:5000/ylzs-nginx:… 提示 Error response from daemon: Get "www.test.cn:5000/v2/": net/http: HTTP/1.x transport connection broken: malformed HTTP response "\x15\x03\x01\x00\x02\x02"
- 原因
- 当前docker用户未登陆,或已经退出
- 方案
- #先执行登录 docker login www.test.cn:5000
docker执行登录提示错误
执行 docker login www.test.cn:5000 提示
Error response from daemon: Get "http://www.test.cn:5000/v2/": net/http: HTTP/1.x transport connection broken: malformed HTTP response "\x15\x03\x01\x00\x02\x02"
- 原因
- 当前输入的用户账号或密码错误
- 方案
-
- 重新登录输入正确的用户账号和密码
-
- 如果有已经登录成功的电脑,可以复制 /root/.docker/config.json 到有问题的相同路径下。 没有该路径和文件则需要自己先创建
docker部署build失败
使用docker部署build的时候,总是提示 mv: can't rename './version_egg/config': Directory not empty
- 原因
- dockerfile 使用了ADD . /app 把当前目录下所有文件都复制到容器,刚好目录下也有 config的文件夹。所以冲突了
- 方案
- 按需ADD 文件,不使用ADD . /app 全部复制
日志切割没有生效
- 原因
- 不同的nginx的docker镜像对应的logs路径是不一样的,官方默认路径是/var/log/nginx/.log {}, 自己下载定制镜像的默认路径才是 /usr/local/nginx/logs/.log {}
- 方案
- 把 /usr/local/nginx/logs/.log {} 修改为 /var/log/nginx/.log {}
在docker容器内不能访问百度
在docker容器内不能访问百度,并且宿主机以外的电脑也不能正常访问 部署的jenkins。需要nginx二次转发。 并且启动centOS7镜像,提示缺少ip4的支持
- 原因
- docker的network没有正常启动,docker版本太新,不包含ip4的支持
- 方案
- 需要加入ip4的支持,才能桥接访问外网
前端转发的后台接口服务,无法正常访问
前端转发的后台接口服务,无法正常访问,并且重启docker-compose restart 提示
Error response from daemon: Cannot restart container nginx: driver failed programming external connectivity on endpoint nginx (73bd4aa78e2e3019133f877e1eae61d0a6bd27ae54d1c6e2b5a52e9203c9d20e):
(iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 444 -j DNAT --to-destination 172.25.0.3:8443 ! -i br-b825f071da74: iptables: No chain/target/match by that name.
- 原因
- iptables的规则被修改了, docker 每次启动都会读取一遍,后续的iptables 如果更新了,依然还是老的规则
- 方案
- 重启docker systemctl restart docker
2.docker-compose
执行命令 docker-compose ps 提示错误
Can't find a suitable configuration file in this directory or any
parent. Are you in the right directory?
Supported filenames: docker-compose.yml, docker-compose.yaml
- 原因
- 必须把yml 命名成指定的名称,如docker-compose.yml,或者docker-compose.yaml
- 方案
- 把自己定义的 mongodb.yml 改成 docker-compose.yml,并且一定要cd 到所在的目录
启动 docker-compose提示错误2
启动 docker-compose提示(root) Additional property nginx is not allowed
-
原因
docker-compose版本太新,会导致解析不了老版本格式的.yml文件 - 方案
- 修改,docker-compose.yml文件在头部新增 serive: 并且下面内容要向右偏移一格
docker-compose部署gitlab .启动后访问无效
启动后访问无效 或提示502 Whoops, GitLab is taking too much time to respond.
- 原因
- 使用的后台运行,其实程序还没有完成启动完
- 方案
-
- 运行的时候不开启后台运行,等待日志完整输出完
-
- 使用后台运行,并使用 docker logs -f id 查看日志
gitlab,运行.gitlab-ci.yml 提示 docker: command not found
- 原因
- gitlab-runner配置启动 需要映射 本地的 /usr/bin/docker到容器的/bin/docker
- 方案
- docker-compose 文件添加
volumes:
- /usr/bin/docker:/bin/docker
curl安装docker-compose 一直sleep
使用curl -L get.daocloud.io/docker/comp… -s-uname -m` > /usr/local/bin/docker-compose
下载的 docker-compose 运行时总是提示sleep ,并不能运行
- 原因
- 最新docker-compose 源码对安全做了限制,只能用非root操作
- 方案
-
- 使用以前下载过的docker-compose 通过ftp上传到指定服务器
-
- 通过 pip执行,缺点:安装的最新版本只能到 1.23, 不能解析最新的yml文件,只能修改版本号为 2 或以下做兼容。
docker-compose部署gitlab,运行.gitlab-ci.yml 提示权限不够
docker-compose部署gitlab,运行.gitlab-ci.yml 提示permission denied while trying to connect to the Docker daemon socket
- 原因
- gitlab-runner 运行访问docker.sock文件权限不够
- 方案
- 执行命令 sudo chmod -R 777 /var/run/docker.sock
3. k8s部署
运行提示
[ERROR Swap]: running with swap on is not supported. Please disable swap
- 原因
- 需要关闭swap分区
- 方案
swapoff -a #临时
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久
swapon -v # 检查 输出为空,表示swap已关闭
启动k8s的错误
error execution phase preflight: unable to fetch the kubeadm-config ConfigMap: this version of kubeadm only supports deploying clusters with the control plane version >= 1.19.0. Current version: v1.18.0
- 原因
- init的指定版本与实际安装的kubeadm 不一致
- 方案
- 移除原来的kubeadm,再重新安装
yum remove -y kubelet kubeadm kubectl
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
启动k8s的错误
启动k8s的时候提示 kubelet cgroup driver: “systemd” is different from docker cgroup driver: “cgroupfs”
- 原因
- k8s的cgroupfs 模式 和 docker的systemd 不一致
- 方案
# 修改docker的模式
vi /etc/docker/daemon.json
# 最后面加入
"exec-opts": ["native.cgroupdriver=cgroupfs"]