Sandcorp샌드코프 · 웹·AI 제품 개발

새 프로젝트 받는 중 · 갱신 2026.11sandcorp.co.krGitHub

← 팁

배포·인프라

도커 소켓을 공유하는 CI에서는 bind mount를 쓰지 않는다

CI 컨테이너가 호스트 도커 소켓으로 compose를 돌리면 마운트 경로는 호스트 기준이고, 없는 경로는 빈 디렉터리로 생긴다.

CI에서 compose로 배포했더니 프록시가 설정 파일을 못 읽고 502를 낸다. 컨테이너 안을 보면 설정 파일 자리에 빈 디렉터리가 있다. 같은 compose 파일을 서버에서 직접 돌리면 멀쩡하다.

Jenkins나 GitLab Runner가 컨테이너 안에서 /var/run/docker.sock을 공유받아 docker compose를 돌리면, 명령은 CI 컨테이너에서 내리지만 실제로 컨테이너를 만드는 것은 호스트의 도커 데몬이다. 그래서 ./config:/etc/app 같은 마운트 경로는 CI 컨테이너가 아니라 호스트 파일 시스템에서 찾는다. 호스트에 그 경로가 없으면 도커가 빈 디렉터리를 만들어 마운트한다. 파일 대신 디렉터리가 들어가니 설정을 못 읽는다.

이런 CI에서는 bind mount로 설정을 넘기지 않는다. 설정 파일은 이미지에 굽거나, 빌드 단계에서 named volume에 복사해 넘긴다.

FROM caddy:2.11.7
COPY Caddyfile /etc/caddy/Caddyfile
services:
  proxy:
    build: ./proxy   # 설정은 이미지 안에
    # volumes:
    #   - ./Caddyfile:/etc/caddy/Caddyfile   # 소켓 공유 CI에서는 호스트 경로로 풀린다

이미지에 구우면 설정도 이미지 버전과 함께 기록되어, 되돌릴 때 설정까지 같이 돌아간다는 덤도 있다.

문의 →