Dify Docker 문제 해결

Dify Docker 문제 해결 (Docker Issues)

Docker 관련해서 자주 겪는 문제들을 모았어요. 증상별로 나눠서 정리했으니 맞는 곳을 찾아보세요.

네트워크·연결 (Network & Connectivity)

502 Bad Gateway

Nginx가 잘못된 컨테이너 IP로 포워딩하고 있을 때 나타나요. 현재 컨테이너 IP를 얻으세요.

docker ps -q | xargs -n 1 docker inspect --format '{{ .Name }}: {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'

다음 같은 줄을 찾으세요.

/docker-web-1: 172.19.0.5
/docker-api-1: 172.19.0.7

dify/docker/nginx/conf.d를 업데이트합니다.

  • http://api:5001http://172.19.0.7:5001로 교체
  • http://web:3000http://172.19.0.5:3000으로 교체

nginx를 재시작하거나 설정을 리로드하세요. 참고: 컨테이너를 재시작하면 IP가 바뀌어요.

localhost 서비스에 접속할 수 없음

Docker 컨테이너는 127.0.0.1로는 호스트 서비스에 닿을 수 없어요. 대신 머신의 로컬 네트워크 IP를 사용하세요. 예: 호스트에서 OpenLLM을 실행 중이라면 Dify를 http://192.168.1.100:port(실제 로컬 IP)로 구성하세요.

CORS 오류와 함께 페이지가 계속 로딩

도메인/URL을 바꾸면 크로스 오리진 문제가 생겨요. docker-compose.yml에서 업데이트하세요.

  • CONSOLE_API_URL — 콘솔 API 백엔드 URL
  • CONSOLE_WEB_URL — 콘솔 웹 프론트엔드 URL
  • SERVICE_API_URL — 서비스 API URL
  • APP_API_URL — 웹앱 API 백엔드 URL
  • APP_WEB_URL — 웹앱 URL

마운팅·볼륨 (Mounting & Volumes)

Nginx 구성 마운트 실패

이런 오류가 나요:

Error mounting "/run/desktop/mnt/host/d/Documents/docker/nginx/nginx.conf" to rootfs at "/etc/nginx/nginx.conf": not a directory

전체 프로젝트를 클론하고 docker 디렉터리에서 실행하세요.

git clone https://github.com/langgenius/dify.git
cd dify/docker
docker compose up -d

포트 충돌

포트 80이 이미 쓰이고 있나요? 두 가지 방법이 있어요.

  1. 충돌하는 서비스(보통 Apache/Nginx)를 중지:
sudo service nginx stop
sudo service apache2 stop
  1. 아니면 docker-compose.yaml의 포트 매핑을 변경:
ports:
  - "8080:80"  # 다른 포트로 매핑

컨테이너 관리 (Container Management)

백그라운드 셸 출력 보기

실행 중인 셸 목록을 봅니다.

docker exec -it docker-api-1 ls /tmp/shells/

셸 출력을 확인합니다.

docker exec -it docker-api-1 cat /tmp/shells/[shell-id]/output.log

컨테이너 재시작 문제

시스템을 재부팅한 뒤 컨테이너가 연결에 실패할 수 있어요. 올바른 시작 순서를 보장하세요.

docker compose down
docker compose up -d

접속하기 전에 모든 서비스가 healthy 상태가 될 때까지 기다리세요.

SSRF 프록시 (SSRF Proxy)

ssrf_proxy 컨테이너는 Server-Side Request Forgery 공격을 막아요.

프록시 규칙 커스터마이즈

docker/volumes/ssrf_proxy/squid.conf를 편집해 ACL 규칙을 추가하세요.

# 민감한 내부 IP에 대한 접근 차단
acl restricted_ip dst 192.168.101.19
acl localnet src 192.168.101.0/24

http_access deny restricted_ip
http_access allow localnet
http_access deny all

변경 후 프록시 컨테이너를 재시작하세요.

SSRF_PROXY가 왜 필요한가요?

서비스가 내부 네트워크 리소스에 무단 요청을 보내는 걸 막아요. 프록시는 샌드박스 서비스의 모든 외부 발신 요청을 가로채고 필터링합니다.