직접 만든 소프트웨어, 두 가지 개발 기록 구현 구조와 적용 범위, 확인한 기능과 남은 한계를 함께 기록합니다. MediaMTX 스트리밍 제어 서버Docker Compose 구성과 파일·라이브·멀티캐스트 송출 RTSP CCTV 관제·분석 프로그램관제 그룹, 영역·출입선, 이벤트 이력을 연결하는 구조 dockercompose8 Docker Compose 달러 기호가 사라질 때: 보간과 컨테이너 셸 구분 Compose의 변수 경고나 빈 문자열이 보이면 먼저 값을 바꾸는 주체가 Compose인지 컨테이너 안의 셸인지 구분하세요. Compose 단계에서 문자 그대로의 달러 기호를 넘기려면 $$를 사용할 수 있지만, 이후 셸이 그 문자를 다시 해석하는지는 별도 문제입니다.원인: YAML을 읽는 단계와 명령 실행 단계를 혼동한다Compose는 설정의 달러 변수 표현을 해석할 수 있습니다. 정의되지 않은 변수에 기본값도 없으면 경고 후 빈 문자열로 바뀔 수 있습니다. 애플리케이션이 실행되기도 전에 값이 달라지는 상황입니다. 컨테이너 환경변수에 같은 이름이 있다는 이유만으로 Compose가 그 값을 알 것이라고 가정하지 마세요.관찰확인 위치다음 판단변수 미정의 경고Compose 입력출처·기본값달러 그대로 전달 필요.. 2026. 10. 21. Docker port is already allocated 해결: Compose 호스트 포트 충돌 점검 Docker 시작 과정의 port is already allocated는 먼저 오류에 표시된 호스트 포트를 누가 사용하는지 확인해야 합니다. 컨테이너 안의 앱 포트를 무작정 바꾸거나 서버를 재부팅하기 전에 Docker 컨테이너와 호스트 리슨 프로세스를 구분하세요. 다른 서비스가 정상 사용 중이면 새 서비스의 호스트 매핑을 변경하는 것이 가능한 해결책입니다.적용 범위는 Docker Engine·Docker Desktop과 Compose V2의 일반적인 bridge 포트 공개입니다. network_mode: host는 같은 ports 예제로 처리하지 않습니다. 명령은 2026-10-10 공식 문서 확인에 기반한 예시이며 실제 운영 서버에서 실행한 기록이 아닙니다. Linux의 ss와 macOS의 lsof는 .. 2026. 10. 12. Docker bind mount permission denied 해결: 경로·UID·GID·SELinux 점검 Docker 컨테이너에서 /app/data에 파일을 저장할 때 permission denied가 발생한다면 Docker 소켓 권한과 파일 마운트 권한을 먼저 구분하세요. 컨테이너가 이미 실행되고 앱의 파일 쓰기만 실패한다면 연결한 호스트 경로, 실제 프로세스의 사용자 ID, 읽기 전용 설정과 SELinux 정책을 차례로 확인하는 편이 좋습니다. 디렉터리 전체에 chmod 777을 적용하면 증거와 접근 범위를 함께 잃을 수 있습니다.1. 오류가 난 경로와 시점을 먼저 나누세요발생 상황확인할 대상docker.sock 접근에서 거부Docker 데몬 연결 권한·context컨테이너 생성 중 소스 경로 오류데몬 호스트의 실제 경로·경로 생성 권한앱이 마운트 파일을 열 때 거부프로세스 ID·파일 소유자·상위 경로·.. 2026. 10. 4. Docker 로그 확인과 용량 관리: compose logs부터 로그 로테이션까지 서비스에 오류가 생겼을 때 로그를 열면 너무 많은 내용이 쏟아지고, 정작 필요한 시간의 기록은 찾기 어려울 수 있습니다. 반대로 로그가 계속 쌓여 서버 디스크를 차지하는 문제도 있습니다. 로그를 읽는 방법과 얼마나 보관할지는 함께 정해야 합니다.이번 글에서는 Docker Compose에서 서비스와 시간 범위를 좁혀 로그를 확인하는 방법, 로그 드라이버의 역할, json-file 로테이션 예시를 살펴봅니다. 헬스체크와 시작 순서 글에서 확인한 오류를 더 자세히 추적할 때 이어서 사용할 수 있는 내용입니다.1. Docker logs는 어떤 로그를 보여줄까?일반적으로 Docker가 수집하는 로그는 컨테이너 프로세스의 표준 출력(stdout)과 표준 오류(stderr)에서 나옵니다. json-file 드라이버는.. 2026. 9. 8. Docker Compose .env와 env_file 차이: 환경변수가 적용되지 않을 때 확인할 것 .env 파일에 값을 적었는데 컨테이너 안에서는 보이지 않거나, 파일을 수정했는데 프로그램이 계속 이전 설정을 사용하는 경우가 있습니다. 파일 이름보다 중요한 것은 그 값이 “Compose 설정을 만드는 데 쓰이는지”, “컨테이너의 환경변수로 전달되는지”입니다.앞서 헬스체크와 시작 순서 글에서 변수로 DB 설정을 표현했습니다. 이번에는 민감한 정보 없이 APP_MODE, LOG_LEVEL 같은 가상 설정으로 값이 전달되는 경로를 살펴봅니다.1. .env에 적으면 자동으로 컨테이너에 들어갈까?기본 .env 파일은 Compose 파일의 변수 치환에 사용할 값을 제공하는 역할을 합니다. 예를 들어 image: "myapp:${TAG}"의 TAG 부분을 채우는 데 쓸 수 있습니다. .env에 있는 모든 항목이 .. 2026. 9. 8. Docker 컨테이너끼리 연결이 안 될 때: localhost·서비스 이름·포트 이해하기 PC 브라우저에서는 웹페이지가 열리는데, 다른 Docker 컨테이너에서 같은 주소를 호출하면 연결이 거부될 때가 있습니다. 이때 먼저 확인할 것은 “요청을 보내는 프로그램이 어디에서 실행되는가”입니다. 호스트의 브라우저와 컨테이너 안의 프로그램은 localhost를 서로 다른 대상으로 해석합니다.이번 글은 Docker 헬스체크와 시작 순서의 후속편입니다. 단일 Docker 호스트에서 Compose의 기본 bridge 네트워크를 사용하는 상황을 기준으로, 주소와 포트의 역할을 정리합니다. host 네트워크나 여러 서버에 걸친 네트워크는 설명 범위에서 제외합니다.1. localhost는 요청을 보내는 곳을 기준으로 봅니다호스트 PC에서 127.0.0.1에 접속하면 그 PC의 로컬 환경을 향합니다. 반면 일반.. 2026. 9. 8. 이전 1 2 다음