docker run的時候如果用上了-p或者docker-compose up -d 的時候用了ports:,那麼就存在端口映射,在配置主從的時候,監聽公網的其他端口如:
這個時候需要配置從節點真實公網映射的地址和端口
# slave-announce-ip 5.5.5.5 # slave-announce-port 1234
哨兵真實公網映射地址和端口
# sentinel announce-ip <ip> # sentinel announce-port <port>
集羣真實公網映射地址和端口
# cluster-announce-ip <ip> #地址 # cluster-announce-port <port> #數據端口 # cluster-announce-bus-port <port> #節點通信端口
可以配合sh腳本和docker-compose 來達到動態修改的效果
docker-compose.yaml
version: "3.6" #設置網絡環境 networks: #引用外部預先定義好的網段 redis-network: external: name: redis-network services: sentinel-1: image: redis container_name: sentinel-1 ports: - "26386:26379" networks: redis-network: ipv4_address: 192.168.1.14 volumes: - "/usr/docker/08/sentinel-1:/usr/src/redis" environment: #環境變量 - REALIP=XXX.XXX.XXX.XXX - REALPORT=26386 command: ["redis-sentinel","/usr/src/redis/conf/sentinel.conf"] entrypoint: #執行 - /bin/sh - /usr/src/sh/redis.sh privileged: true #特殊權限 working_dir: /usr/src/redis #工作目錄 stdin_open: true #打開標準輸入 tty: true #模擬僞終端
redis.sh
echo " slave-announce-ip $REALIP
slave-announce-port $REALPORT " >> /usr/src/redis/conf/redis.conf
redis-server /usr/src/redis/conf/redis.conf
生成redis docker的Dockerfile
FROM alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk add gcc g++ libc-dev wget vim openssl-dev make linux-headers \
&& rm -rf /var/cache/apk/*
#通過選擇更小的鏡像,刪除不必要文件清理不必要的安裝緩存,從而瘦身鏡像
#創建相關目錄能夠看到日誌信息跟數據跟配置文件
RUN mkdir -p /usr/src/redis \
&& mkdir -p /usr/src/redis/data \
&& mkdir -p /usr/src/redis/conf \
&& mkdir -p /usr/src/sh \
&& mkdir -p /usr/src/redis/log \
&& mkdir -p /var/log/redis
RUN wget -O /usr/src/redis/redis-4.0.11.tar.gz "http://download.redis.io/releases/redis-4.0.11.tar.gz" \
&& tar -xzf /usr/src/redis/redis-4.0.11.tar.gz -C /usr/src/redis \
&& rm -rf /usr/src/redis/redis-4.0.11.tar.tgz
RUN cd /usr/src/redis/redis-4.0.11 && make && make PREFIX=/usr/local/redis install \
&& ln -s /usr/local/redis/bin/* /usr/local/bin/ && rm -rf /usr/src/redis/redis-4.0.11
COPY ./redis/sh/redis.sh /usr/src/sh
RUN chmod +x /usr/src/sh/redis.sh