본문 바로가기

취미, 관심/NAS, Server

[docker] docker-compose IP 고정시키기

시놀로지 나스에 우성짱님의 멀티 사이트 docker-compose를 참고해 웹서버를 구축했는데, 생각지도 못한 난관이 생겼습니다.

 

도커에 올라가있는 nginx에서 역방향 프록시를 사용해 dsm으로 연결을 해주고 있었는데, docker-compose down 후 docker-compose up -d 를 하게 되면 IP를 새로 받아오게 되면서 게이트웨이가 변경되던 것. 즉..

IP로 뭔가를 주고받을때 접속이 불가능한 현상이 생기게 됩니다.

 

이것 뿐 아니라 어떠한 용도로 IP 또는 대역을 고정시켜야 할 필요가 있을 때 참고가 될 수 있을듯 해 남겨둡니다.

 

제가 실제 사용하는 docker-compose.yml 을 일부 가져온것이라, 용도에 맞추어 사용하시면 될 것 같습니다.

version: '3'

services:

  db:
    image: mariadb:latest
    container_name: db
    restart: unless-stopped
    env_file: .env
    environment:
      - TZ=Asia/Seoul
    volumes:
      - ./data/dbdata:/var/lib/mysql
      - ./db:/docker-entrypoint-initdb.d
    networks:
      default_bridge:
        ipv4_address: 172.26.0.10


  nginx:
    depends_on:
      - php
    image: nginx:alpine
    container_name: nginx
    environment:
      - TZ=Asia/Seoul
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./site:/var/www/html
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/logs:/var/log/nginx/
      - /etc/localtime:/etc/localtime:ro
      - ./ssl:/ssl
    networks:
      default_bridge:
        ipv4_address: 172.26.0.13

networks:
  default_bridge:
    ipam:
      driver: default
      config:
        - subnet: 172.26.0.0/16

만약, 컨테이너들이 IP가 필요 없다면(혹은 자동으로 받아도 된다면) networks: 의 ipv4_address 부분을 지우시면 됩니다.

 

이제 docker-compose down -> docker-compose up 을 하더라도 서브넷이 고정되므로, IP를 기준으로 한 세팅을 다시 할 필요가 없어집니다.

 

* 이 방법이 맞는지는 모르겠고(..) 여기저기 찾아보다가 성공(?)한 방법이기 때문에 더이상의 응용은 제게 무리입니다;;