Ubuntu에서 Docker 에 open-webui 올리기
docker run -d \
--network=host \
-v open-webui:/app/backend/data \
-e OLLAMA_BASE_URL=http://127.0.0.1:11434 \
-e PORT=4000 \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main
--network=host의 의미:
- 포트 바인딩 불필요
- 기본적으로 Docker 컨테이너는 내부 포트를 호스트의 포트에 매핑해야 한다(
-p
옵션 사용). - 하지만
--network=host
를 사용하면, 컨테이너의 모든 네트워크 요청이 호스트의 네트워크와 동일한 환경에서 실행되므로 포트 매핑이 필요 없다. - 예를 들어, 컨테이너 내에서
localhost:5000
에 서비스가 열리면, 호스트에서도localhost:5000
으로 접근할 수 있다.
- 기본적으로 Docker 컨테이너는 내부 포트를 호스트의 포트에 매핑해야 한다(
- 빠른 네트워크 성능
- 컨테이너가 가상 네트워크 브릿지(
bridge
네트워크) 없이 직접 호스트 네트워크를 사용하므로, 네트워크 레이어의 오버헤드가 줄어든다. - 특히 로컬 통신이 많은 애플리케이션에서는 성능이 향상될 수 있다.
- 컨테이너가 가상 네트워크 브릿지(
- 다른 컨테이너와의 격리 부족
bridge
네트워크를 사용하면 컨테이너 간 네트워크를 격리할 수 있지만,--network=host
를 사용하면 컨테이너가 호스트의 모든 네트워크 인터페이스를 공유하기 때문에 보안상 위험이 있을 수 있다.
- Linux에서만 적용
--network=host
는 Linux에서는 완벽하게 동작하지만,
Windows와 macOS에서는 내부적으로 가상화 계층이 있기 때문에 동일하게 동작하지 않는다.
위 docker run 명령어에서 --network=host의 역할
OLLAMA_BASE_URL=http://127.0.0.1:11434
→ Open WebUI 컨테이너가 호스트에서 실행 중인 Ollama 서버(127.0.0.1:11434)에 직접 접근해야 한다.--network=host
를 사용하면,- 컨테이너 내에서도 호스트의 127.0.0.1이 그대로 유지되므로,
OLLAMA_BASE_URL=http://127.0.0.1:11434
가 문제없이 동작한다.
- 만약
--network=host
를 사용하지 않는다면,127.0.0.1:11434
는 컨테이너 내부의 루프백 주소가 되어 호스트의 Ollama 서버에 접근할 수 없다.- 이 경우 Docker 네트워크를 통해 접근해야 하므로,
host.docker.internal
을 사용하거나 별도의 네트워크 설정이 필요하다.
Docker에서 host.docker.internal 주소는 Docker 18.03 버전부터 macOS와 Windows에서 지원되기 시작했습니다.
그러나 Linux에서는 이 기능이 기본적으로 지원되지 않았으며, Docker 20.10 버전부터 --add-host=host.docker.internal:host-gateway 옵션을 사용하여 유사한 기능을 구현할 수 있게 되었습니다.
따라서, Ubuntu를 포함한 Linux 환경에서 host.docker.internal 기능을 사용하려면 Docker 20.10 버전 이상이 필요합니다.
--network=host를 사용할 때 주의할 점
- 보안 이슈
- 컨테이너가 호스트의 네트워크 인터페이스를 공유하므로, 컨테이너 내부에서 실행되는 서비스가 호스트의 모든 네트워크 트래픽에 접근 가능할 수 있다.
- 포트 충돌 가능성
- 컨테이너에서 특정 포트를 사용할 경우, 호스트에서 이미 해당 포트를 사용 중이라면 충돌이 발생할 수 있음.
- 예를 들어, 컨테이너 내부에서
80
포트를 사용하는 경우, 호스트에서 이미 웹 서버(Apache/Nginx 등)가80
포트를 사용 중이라면 실행이 실패할 수 있다.
포트 변경을 원하는 경우 Docker 스크립트에 추가한다.
-e PORT=4000 \ # 내부 애플리케이션 포트를 변경
Mac에서는 네트워크를 달리해야 한다. 아래 링크 참조
'AI' 카테고리의 다른 글
Claude API Test > React (0) | 2025.04.06 |
---|---|
MacOS > MCP Server 만들기 with Python (0) | 2025.04.05 |
deepseek-r1 로컬pc에서 실행시키기 (0) | 2025.01.30 |
Ubuntu에서 Docker 에 open-webui 올리기
docker run -d \
--network=host \
-v open-webui:/app/backend/data \
-e OLLAMA_BASE_URL=http://127.0.0.1:11434 \
-e PORT=4000 \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main
--network=host의 의미:
- 포트 바인딩 불필요
- 기본적으로 Docker 컨테이너는 내부 포트를 호스트의 포트에 매핑해야 한다(
-p
옵션 사용). - 하지만
--network=host
를 사용하면, 컨테이너의 모든 네트워크 요청이 호스트의 네트워크와 동일한 환경에서 실행되므로 포트 매핑이 필요 없다. - 예를 들어, 컨테이너 내에서
localhost:5000
에 서비스가 열리면, 호스트에서도localhost:5000
으로 접근할 수 있다.
- 기본적으로 Docker 컨테이너는 내부 포트를 호스트의 포트에 매핑해야 한다(
- 빠른 네트워크 성능
- 컨테이너가 가상 네트워크 브릿지(
bridge
네트워크) 없이 직접 호스트 네트워크를 사용하므로, 네트워크 레이어의 오버헤드가 줄어든다. - 특히 로컬 통신이 많은 애플리케이션에서는 성능이 향상될 수 있다.
- 컨테이너가 가상 네트워크 브릿지(
- 다른 컨테이너와의 격리 부족
bridge
네트워크를 사용하면 컨테이너 간 네트워크를 격리할 수 있지만,--network=host
를 사용하면 컨테이너가 호스트의 모든 네트워크 인터페이스를 공유하기 때문에 보안상 위험이 있을 수 있다.
- Linux에서만 적용
--network=host
는 Linux에서는 완벽하게 동작하지만,
Windows와 macOS에서는 내부적으로 가상화 계층이 있기 때문에 동일하게 동작하지 않는다.
위 docker run 명령어에서 --network=host의 역할
OLLAMA_BASE_URL=http://127.0.0.1:11434
→ Open WebUI 컨테이너가 호스트에서 실행 중인 Ollama 서버(127.0.0.1:11434)에 직접 접근해야 한다.--network=host
를 사용하면,- 컨테이너 내에서도 호스트의 127.0.0.1이 그대로 유지되므로,
OLLAMA_BASE_URL=http://127.0.0.1:11434
가 문제없이 동작한다.
- 만약
--network=host
를 사용하지 않는다면,127.0.0.1:11434
는 컨테이너 내부의 루프백 주소가 되어 호스트의 Ollama 서버에 접근할 수 없다.- 이 경우 Docker 네트워크를 통해 접근해야 하므로,
host.docker.internal
을 사용하거나 별도의 네트워크 설정이 필요하다.
Docker에서 host.docker.internal 주소는 Docker 18.03 버전부터 macOS와 Windows에서 지원되기 시작했습니다.
그러나 Linux에서는 이 기능이 기본적으로 지원되지 않았으며, Docker 20.10 버전부터 --add-host=host.docker.internal:host-gateway 옵션을 사용하여 유사한 기능을 구현할 수 있게 되었습니다.
따라서, Ubuntu를 포함한 Linux 환경에서 host.docker.internal 기능을 사용하려면 Docker 20.10 버전 이상이 필요합니다.
--network=host를 사용할 때 주의할 점
- 보안 이슈
- 컨테이너가 호스트의 네트워크 인터페이스를 공유하므로, 컨테이너 내부에서 실행되는 서비스가 호스트의 모든 네트워크 트래픽에 접근 가능할 수 있다.
- 포트 충돌 가능성
- 컨테이너에서 특정 포트를 사용할 경우, 호스트에서 이미 해당 포트를 사용 중이라면 충돌이 발생할 수 있음.
- 예를 들어, 컨테이너 내부에서
80
포트를 사용하는 경우, 호스트에서 이미 웹 서버(Apache/Nginx 등)가80
포트를 사용 중이라면 실행이 실패할 수 있다.
포트 변경을 원하는 경우 Docker 스크립트에 추가한다.
-e PORT=4000 \ # 내부 애플리케이션 포트를 변경
Mac에서는 네트워크를 달리해야 한다. 아래 링크 참조
'AI' 카테고리의 다른 글
Claude API Test > React (0) | 2025.04.06 |
---|---|
MacOS > MCP Server 만들기 with Python (0) | 2025.04.05 |
deepseek-r1 로컬pc에서 실행시키기 (0) | 2025.01.30 |