사용자 도구

사이트 도구


docker:docker_compose

문서의 이전 판입니다!


docker-compose

docker compose cli와 다른 것이다.

install v2

네트워크

docker-compose 에서 network 생성 불가시

  • 특히 VPN 에 접속한 상태에서 발생하는 것으로 보임.
  • 전제: 내가 이미 docker 에 network 를 직접 생성해둔 상태에서 오류 발생
    Creating network "xxx_default" with the default driver
    ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network
  • 이 경우 이미 존재하는 network 를 docker-compose.yml 에 명시해주거나 직접 생성한 뒤 명시해준다.
    services:
       myservice:
           network_mode: bridge
  • bridge 사용시에는 docker container 들 간에 docker container 이름 기반의 lookup이 작동하지 않는다.
  • docker-compose user defined bridge 일 때만 이름 기반 lookup이 작동한다.
  • 더 좋은 해결책 : IP 대역 충돌이 일어나지 않는 subnet 을 지정한 network 를 생성하고 default로 지정한다.
networks:
  default:
    driver: bridge
    ipam:
      config:
        - subnet: ${MY_SUBNET:-192.168.100.1/24} # 192.168.100.x 대역의 subnet 으로 네트워크 생성
# .env 파일이나 환경 변수로 MY_SUBNET 값을 강제 지정가능함.
 
# 만약 network 이름이 default 가 아니라면, 각 service 에 네트워크 이름 명시 필요
services:
  myservice:
    networks:
      - mynetwork
networks:
  mynetwork:
    driver: bridge
    ipam:
      config:
        - subnet: ${MY_SUBNET:-192.168.100.1/24} # 192.168.100.x 대역의 subnet 으로 네트워크 생성

.env

  • 환경 변수를 지정할 수 있다.
  • .env 파일을 만들어서 KEY=VALUE 형태로 추가해주면 docker-compose 실행시 적용된다.
  • 원하는 환경변수 파일을 명시적으로 적용하려면 --env-file=파일명 옵션을 준다.
  • 특정 환경 변수만 변경하고자 한다면 Linux 에서 보편적으로 하는 방식으로 한다.
MY_ENV_VAR=xxx docker compose up -d
 
# 혹은
export MY_ENV_VAR=xxx
docker compose up -d
  • docker-compose.yml 내에서의 환경변수
servicename:
  environment:
    - MY_ENV_VAR=xxx # 명시적 값 설정
    - ANOTHER_ENV_VAR # 이 값은 외부 설정값이 그대로 container 로 주입됨.
  env_file:
    - web-variables.env # 환경변수 파일 내의 환경변수들이 전달됨.

참조

docker/docker_compose.1647501942.txt.gz · 마지막으로 수정됨: 2022/03/17 16:25 저자 kwon37xi