杂谈3-docker compose 启动容器失败(端口被占用)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杂谈3-docker compose 启动容器失败(端口被占用)相关的知识,希望对你有一定的参考价值。
参考技术A 记一次经历:使用命令 docker-compose up 起容器的时候失败,报错:10086端口被占用(我的容器需使用该端口)
操作:
1. 查看10086端口被什么进程占用
执行命令
10086端口被PID为1079的进程占用
3. 重启容器,失败。根据Error百度
使用命令,查看机器的网络情况
4. 根据给出的10086端口的进程占用情况,再一次杀进程sshd。
5. 重启容器成功
6. 后续无法连接机器了,22端口不通,其他端口可以。估计是关掉了sshd服务的关系。后面让管机器的同事重启一下就可以了~
Docker部署Docker-compose部署redis容器及启动失败挂载失败等问题
文章目录
前言
最近在尝试用docker部署项目,在尝试启动Redis容器时各种起不来,卡了一段时间,特此记录下解决过程。
Docker-compose部署redis的正确方式
Docker-compose.yml 文件
services:
redis:
image: redis:6.2
container_name: redis6
restart: always
environment:
- TZ=Asia/Shanghai
ports:
- "6378:6379"
volumes:
- ./redis.conf:/usr/local/etc/redis/redis.conf
- ./data:/data:rw
- ./logs:/logs
command: redis-server /usr/local/etc/redis/redis.conf --requirepass "123456"
文件目录结构
说明:
文件名 | 描述 |
---|---|
redis.cnf | 配置文件 |
data | 数据文件目录 |
docker-compose.yml | 用来启动redis容器 |
logs | 日志文件目录 |
redis.conf 关键信息
# bind 127.0.0.1
daemonize no
logfile /logs/redis.log
appendonly yes
说明:
配置项 | 描述 |
---|---|
bind | 指定本机网卡对应的IP地址,限制本机访问,默认 bind 127.0.0.1 |
daemonize | 指定是否为守护进程方式运行,默认值为no |
logfile | 指定日志文件路径,默认值为 logfile ’ ', 默认为控制台打印,并没有日志文件生成 |
appendonly | 是否开启持久化,默认值为no |
docker-compose 启动
# 前台启动容器,控制台会打印容器启动的日志信息,方便看异常信息
docker-compose up
启动后用redis-cli连接server
至此,一切顺利的话,redis服务就成功启动啦!
问题列表
redis启动失败
redis 启动失败,status 在不断的重启中,端口连接失败。
原因 & 解决方案
redis.conf 中设置了 daemonize yes
当daemonize 设置了yes,表示redis在后台运行,当执行docker-compose执行启动redis进程时,docker发现自己无事可做,容器自动结束,所以导致redis启动失败。
误打误撞地启动成功了
配置信息:
redis.conf 中 daemonize yes
docker-compose.yml:
目录结构:
可以看到新增redis目录,并且新增redis目录下 redis.conf 文件大小为0;
我分析启动成功的原因是在设置挂载目录时,设置了一个不存在的/redis/xx的目录,同样/redis/redis.conf 也不存在,推测可能是redis在启动的时候找不到配置文件,用了内置的默认文件,启动成功了~ 噗~
redis /data 数据目录挂载失败
观察到的现象是设置了appendonly=yes ,正常情况下会在data目录下生成appendonly.aof,但是在宿主机的data目录下未发现任何文件,这时候看redis日志如下:
原因
对于appendonly.aof文件没有写的权限
设置权限的两种方式
- 在宿主机的挂载目录下设置读写权限和操作用户组
- 在volumes 中设置读写权限
1、在宿主机的挂载目录下设置读写权限和操作用户组
sudo chown 999:999 /data
sudo chmod 777 /data
2、在volumes 中设置读写权限
volumes:
- ./data:/data:rw
进入容器查看/data目录权限:
在宿主机查看/data 目录:
小结
平时对于组件中间件的信息拿来就用,了解的少,思考的也少,导致了一个又一个的问题,希望自己越来越专业~
以上是关于杂谈3-docker compose 启动容器失败(端口被占用)的主要内容,如果未能解决你的问题,请参考以下文章
Docker部署Docker-compose部署redis容器及启动失败挂载失败等问题
Docker部署Docker-compose部署redis容器及启动失败挂载失败等问题
Docker部署Docker-compose部署redis容器及启动失败挂载失败等问题
Docker部署Docker-compose部署mysql容器及创建数据库失败问题