docker-compose php+nginx+elasticsearch+redis集群配置

本文详细介绍了使用Docker Compose进行PHP、Nginx、Elasticsearch及Redis集群的配置与部署过程,涵盖了容器化环境下各组件的参数设置、网络链接与数据持久化策略。

#php+nginx+elasticsearch+redis集群配置

version: "3"
services:
  nginx:
    container_name: web-nginx
    image: nginx:latest
    restart: always
    ports:
      - 80:80
    volumes:
      - ./webserver:/webserver
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/conf.d:/etc/nginx/conf.d

  php7.2:
    container_name: php7.2
    image: php:7.2-fpm
    restart: always
    expose:
      - "9000"
    volumes:
      - ./php/php.ini:/etc/php/php.ini
      - ./php/php-fpm.conf:/etc/php/php-fpm.conf
      - ./log/php/:/var/log/php
      - ./webserver:/webserver
  es1:
    image: nshou/elasticsearch-kibana
    container_name: es1
    environment:
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    cap_add:
      - IPC_LOCK
    volumes:
      - /home/gaobo/docker-compose/elasticsearch/es1/data:/home/gaobo/elasticsearch/data
      - /home/gaobo/docker-compose/elasticsearch/es1/elasticsearch.yml:/home/gaobo/elasticsearch/config/elasticsearch.yml
    ports:
      - 9201:9200
    #networks:
      #- docker-compose_default
  es2:
    image: nshou/elasticsearch-kibana
    container_name: es2
    environment:
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    cap_add:
      - IPC_LOCK
    volumes:
      - /home/gaobo/docker-compose/elasticsearch/es2/data:/home/gaobo/elasticsearch/data
      - /home/gaobo/docker-compose/elasticsearch/es2/elasticsearch.yml:/home/gaobo/elasticsearch/config/elasticsearch.yml
    ports:
      - 9202:9200
    links:
      - es1
  redis-node1:
    image: redis:5.0.5
    container_name: redis-node1
    restart: always
    ports:
      - 6061:6061
      - 16061:16061
    volumes:
      - /home/gaobo/docker-compose/redis/slave1:/data
      - /home/gaobo/docker-compose/redis/config/slave1/redis.conf:/etc/redis/redis.conf/redis.conf
    command:
      redis-server /etc/redis/redis.conf/redis.conf   
  redis-node2:
    image: redis:5.0.5
    container_name: redis-node2
    restart: always
    ports:
      - 6062:6062
      - 16062:16062
    volumes:
      - /home/gaobo/docker-compose/redis/slave2:/data
      - /home/gaobo/docker-compose/redis/config/slave2/redis.conf:/etc/redis/redis.conf/redis.conf
    command:  
      redis-server /etc/redis/redis.conf/redis.conf
  redis-node3:
    image: redis:5.0.5
    container_name: redis-node3
    restart: always
    ports:
      - 6063:6063
      - 16063:16063
    volumes:
      - /home/gaobo/docker-compose/redis/slave3:/data
      - /home/gaobo/docker-compose/redis/config/slave3/redis.conf:/etc/redis/redis.conf/redis.conf
    command:
      redis-server /etc/redis/redis.conf/redis.conf

VOLUMES 宿主机建立相应目录即可

<think>我们正在解决两个主要问题:1)容器健康检查失败导致状态为unhealthy;2)docker-compose配置文件缺失。根据用户的问题,现在重点是如何在docker-compose配置健康检查参数来解决容器不健康的问题。引用[1]和引用[2]提供了健康检查的配置方式:-docker-compose.yml中,使用healthcheck指令来配置-主要参数包括:test(检查命令)、interval(间隔时间)、timeout(超时时间)、retries(重试次数)、start_period(启动后等待时间)。具体步骤:1.在docker-compose.yml中为需要健康检查的服务配置healthcheck。2.根据服务的特性设置合适的test命令(例如,对于web服务,可以使用curl检查某个端点)。3.调整参数(如增加start_period给服务足够的启动时间,调整retries避免因短暂故障而失败)。示例配置(参考引用[2]):```yamlversion:"3.8"services:your_service:image:your_imagehealthcheck:test:["CMD","curl","-f","http://localhost:8080/health"]#这里替换为实际服务的健康检查端点interval:30stimeout:10sretries:3start_period:30s#根据服务启动时间调整```注意:如果服务本身没有提供健康检查端点,可以考虑使用其他命令,例如检查进程是否存在(如`["CMD","pgrep","nginx"]`)或者检查端口是否监听(使用`netstat`或`ss`)。另外,用户之前执行`docker-composelogs`时遇到找不到配置文件的问题,需要确保在正确的目录(含有docker-compose.yml的目录)执行命令,或者使用`-f`指定文件。因此,综合解决方案:1.定位到docker-compose.yml文件所在目录,或者使用`-f`指定。2.编辑docker-compose.yml,为每个需要健康检查的服务(如lina,nginx,lion等)添加或调整healthcheck配置。3.重新启动服务:`docker-composeup-d`如果问题仍然存在,可以通过`dockerinspect<container_id>`查看健康检查的详细日志,进一步调整配置。下面我们详细说明健康检查参数的含义和配置方法。</think>### Docker Compose 健康检查配置详解 在 Docker Compose配置健康检查参数是解决容器不健康状态的关键。以下是核心参数说明和配置示例: #### 📌 健康检查核心参数(docker-compose.yml) ```yaml services: your_service: healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/health"] # 健康检测命令 interval: 30s # 检查间隔(默认30s)[^2] timeout: 10s # 命令超时时间(默认30s) retries: 3 # 失败重试次数(默认3次)[^2] start_period: 30s # 服务初始化宽限期(默认0s)[^1] ``` #### 🔍 参数详解 1. **test**(必填) - 检测命令格式:`["CMD", "executable", "param1", "param2"]` 或 `["CMD-SHELL", "command"]` - 成功返回 `0`,失败返回非 `0` - 示例: ```yaml test: ["CMD", "pgrep", "nginx"] # 检查nginx进程是否存在 test: ["CMD-SHELL", "curl -f http://localhost || exit 1"] # 检查Web服务 ``` 2. **start_period**(关键参数) - 解决服务启动慢导致的误报 - 建议值:大于服务实际启动时间(如Java应用可设 `60s`)[^1] ```yaml start_period: 60s # 给服务1分钟初始化时间 ``` 3. **retries** + **interval** 组合 - 控制故障容忍度 - 计算公式:`最大故障时间 = retries × interval` ```yaml interval: 15s retries: 4 # 允许1分钟内临时故障 ``` #### 🛠 调试技巧 1. **查看健康日志** ```bash docker inspect <container_id> --format='{{json .State.Health}}' ``` 输出示例: ```json { "Status": "unhealthy", "FailingStreak": 3, "Log": [ { "ExitCode": 1, "Output": "curl: (7) Failed to connect to localhost port 8080: Connection refused" } ] } ``` 2. **临时禁用健康检查** ```yaml # healthcheck: # test: ["CMD", "curl", "-f", "http://localhost:8080/health"] ``` #### ✅ 最佳实践配置示例 ```yaml version: '3.8' services: webapp: image: my-webapp:latest healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:8080/healthcheck || exit 1"] interval: 20s timeout: 5s retries: 3 start_period: 40s # 适应Java应用启动慢的特性 db: image: postgres:14 healthcheck: test: ["CMD", "pg_isready", "-U", "postgres"] interval: 10s start_period: 20s ``` #### 💡 常见问题解决 1. **端口连接失败** ```yaml test: ["CMD-SHELL", "nc -z localhost 8080 || exit 1"] # 使用netcat检测端口 ``` 2. **文件系统检测** ```yaml test: ["CMD-SHELL", "test -f /var/run/service.pid"] # 检查PID文件存在性 ``` 3. **多服务依赖** ```yaml depends_on: db: condition: service_healthy # 等待db健康后再启动[^2] ``` > ⚠️ 注意:修改配置后需执行 `docker-compose up --force-recreate` 重建容器
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值