杂谈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容器及创建数据库失败问题

Docker部署Docker-compose部署mysql容器及创建数据库失败问题

Docker部署Docker-compose部署mysql容器及创建数据库失败问题