
하고자 하는 목표는 다음과 같다.
local 환경의 ollama : port 11500 사용
Container 기반의 ollama : port 11434 사용
이렇게 하면 두 환경 모두 사용이 가능하지 않을까 라는 생각
1. local 환경 세팅 (Window)
Ollama를 이용한 환경 세팅
Ollama를 왜 사용하냐?그냥 너도 나도 LLM 모델을 Ollama에 올리길래Hugging Face 말고 Ollama 써봐야지 하고 환경 세팅을 해봤다 Ollama의 장점은- 오프라인 LLM 이 가능하다는 것이다 (인터넷없이 개인 PC에
aisj.tistory.com
여기에서 받은 ollama에서 시작을 해보자
지금 port가 11434로 되어 있는데 이것을 11500으로 바꾸자.
- 임시로 Port 바꾸기
임시적으로 바꿀 때는
#CMD
set OLLAMA_HOST=0.0.0.0:11500
#PowerShell
$env:OLLAMA_HOST = "0.0.0.0:11500"
이렇게 바꾸면 된다
하지만 우리는 영구적으로 바꾸고 싶기 때문에
- 영구적으로 Port 바꾸기
직접 환경변수창에 들어가서
OLLAMA_HOST 0.0.0.0:11500
으로 설정해주면 된다

근데 나는 CMD 창에서 바꾸고 싶다고 하면
setx OLLAMA_HOST "0.0.0.0:11500"
이걸 실행시켜주면 된다
실행
그리고 실행해보면
ollama serve
....INFO OLLAMA_FLASH_ATTENTION:false OLLAMA_GPU_OVERHEAD:0 OLLAMA_HOST:http://0.0.0.0:11500 OLLAMA_INTEL ....(생략)
이렇게 환경변수가 잘 적용된 것을 볼 수 있다
2. Container를 통한 세팅
먼저 다음 cmd를 실행시켜 주자 (ollama라는 이름에 Container가 만들어져 있다고 가정)
docker exec -it ollama ollama pull gpt-oss:20b
- exec : 이미 실행 중인 컨테이너 내부에서 명령을 실행하라는 Docker 명령입니다.
- -i (interactive) : 표준 입력(STDIN)을 계속 열어둬서, 명령 실행 중에 입력을 받을 수 있게 합니다.
- -t (tty) : 터미널(TTY)을 할당해서, 명령 실행 결과를 터미널 형식으로 보여줍니다.
docker exec -it <컨테이너명> <명령>은 실행 중인 컨테이너 안에 터미널을 연결하고, 그 안에서 명령을 직접 실행 방식
이러면 모델까지 가져와 진다.
자세한 설명은 https://aisj.tistory.com/245
Ollama를 이용한 환경 세팅
Ollama를 왜 사용하냐?그냥 너도 나도 LLM 모델을 Ollama에 올리길래Hugging Face 말고 Ollama 써봐야지 하고 환경 세팅을 해봤다 Ollama의 장점은- 오프라인 LLM 이 가능하다는 것이다 (인터넷없이 개인 PC에
aisj.tistory.com
참고
그리고 serve를 해주면
docker exec -it ollama ollama serve
Error response from daemon: container fc....3419a15 is not running
다음과 같은 오류가 나오면 container가 실행되지 않고 있다는 것이다
이는 좀 더 Real 하게 보이기 위해 내가 강제로 container를 꺼서 생긴 문제이다
docker ps
를 한다면

이렇게 아무것도 실행되지 않아 위에 같은 에러가 나온 것을 볼 수 있다
docker ps -a
-a 옵션을 보면 위에 첨부한 링크 같이 docker로 ollama 와 webui를 다운 받았으면 (명령어 하나로 둘다 다운)

이렇게 두 개의 Container가 다운 된 것을 볼 수 있다
docker start ollama
ollama를 실행 시켜주고 (참고로 지금 local에서는 11500 port로 ollama가 serve되고 있는 상태이다)
다시 Container를 실행시켜주면
docker exec -it ollama ollama serve
다음과 같은 오류가 나온다
Error: listen tcp 0.0.0.0:11434: bind: address already in use
단순하게 보면 지금 local에서 serve 되고 있는 ollama 영향아닐까 생각할 수 있는데
로컬 ollama를 꺼도 증상은 똑같았다
자 컨테이너 속으로 들어가 보자 (CTRL + D 누르면 나와짐)
docker exec -it ollama
이러면 프롬포트가 바뀌면서 ollama container 내부로 들어가진다

Error: listen tcp 0.0.0.0:11434: bind: address already in use
의 오류가 나는 이유는
COMMAND 항목에 /bin/ollama serve가 표시되어 있는데,
해당 컨테이너가 시작될 때 그 명령어를 메인 프로세스로 실행하고 있기 때문에
이미 bind를 걸었다는 것이다.
그럼 실행되고 있는데 왜 외부에서는 접속이 안 되었던 걸까
ollama ps

실행되고 있는 것을 찍어보면 지금 port가 11434/tcp로 되어있는데
0.0.0.0:11434->11434/tcp처럼 되어야 외부 바인딩이 걸리는 것이다
이거는 Container를 만들 때 지정을 해줘야 하는데
기존에 container를 만들 때
docker-compose up -d
으로 docker-compose.yaml을 실행시켜서 만들었으나
공식 Github는 외부 바인딩을 고려하지 않고 yaml을 만들었기 때문에
아래같이 바꿔줘야 한다
#docker-compose.yaml
services:
ollama:
volumes:
- ollama:/root/.ollama
container_name: ollama
pull_policy: always
tty: true
restart: unless-stopped
image: ollama/ollama:${OLLAMA_DOCKER_TAG-latest}
ports:
- "11434:11434" # 외부 바인딩 추가
해결 방법
근데 나는 이미 늦었는데 우짜냐....
Container 삭제하고 다시 만드는 방법이 정답이다
docker stop ollama
docker rm ollama
자 새로 받기 전에 docker-compose.yaml을 다음과 같이 바꿔주자
#docker-compose.yaml
services:
ollama:
# GPU support
deploy:
resources:
reservations:
devices:
- driver: ${OLLAMA_GPU_DRIVER-nvidia}
count: ${OLLAMA_GPU_COUNT-1}
capabilities:
- gpu
volumes:
- ollama:/root/.ollama
container_name: ollama
pull_policy: always
tty: true
restart: unless-stopped
image: ollama/ollama:${OLLAMA_DOCKER_TAG-latest}
# Expose Ollama API outside the container stack
ports:
- ${OLLAMA_WEBAPI_PORT-11434}:11434
open-webui:
build:
context: .
args:
OLLAMA_BASE_URL: '/ollama'
dockerfile: Dockerfile
image: ghcr.io/open-webui/open-webui:${WEBUI_DOCKER_TAG-main}
container_name: open-webui
volumes:
- open-webui:/app/backend/data
depends_on:
- ollama
ports:
- ${OPEN_WEBUI_PORT-3000}:8080
environment:
- 'OLLAMA_BASE_URL=http://ollama:11434'
- 'WEBUI_SECRET_KEY='
extra_hosts:
- host.docker.internal:host-gateway
restart: unless-stopped
volumes:
ollama: {}
open-webui: {}
그 다음 새로 Container를 만들어 주고 그 안에 모델도 다운로드 해주자
cd open-webui
docker-compose up -d
이렇게 한다고 하면 이론적으로는 외부에서 연결이 되어야 한다
(방화벽 세팅까지 끝났다는 가정하에)
외부와 포트가 열려있는지 확인하려면 다음을 실행시켜보면
# PowerShell
netsh interface portproxy show all
# linux
netstat -tlnp
해당 포트가 수신 대기 중인지를 확인할 수 있다

이랬는데 왜 안되는 것일까
나같은 경우는 윈도우에 WSL를 이용하여 Linux처럼 쓰고 있는데
WSL → 윈도우 호스트 포트 포워딩 설정이 되지 않아 생겼던 문제 였다
#linux
netsh interface portproxy add v4tov4 listenport=11434 listenaddress=<서버 IP> connectport=11434 connectaddress=127.0.0.1

외부에서 정상 동작 확인 완료
Web_ui의 경우는
PS C:\Users\Administrator> netsh interface portproxy add v4tov4 listenport=3000 listenaddress=<서버IP> connectport=3000 connectaddress=localhost
으로 해결
Error Shooting 1
docker: Error response from daemon: could not select device driver with capabilities: [[gpu]]
이건 nvidia-container-toolkit 가 안 깔려 있어서 생기는 문제이다
나 같은 경우는 다음과 같이 해결하였다 (참고로 Window환경에서 WSL로 Linux를 사용하고 있다)
(Toolkit 관련 이것저것 삽질한 이력이 있다면 1번 부터 아니면 2번 부터)
# 1. 잘못된 저장소 파일 삭제
sudo rm /etc/apt/sources.list.d/libnvidia-container.list
sudo rm /etc/apt/sources.list.d/*nvidia*.list
# 2. 아키텍처 변수 설정
ARCH=$(dpkg --print-architecture)
# 3. GPG 키 등록
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
# 4. generic deb 저장소 등록 (배포판 이름 없이)
echo "deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] \
https://nvidia.github.io/libnvidia-container/stable/deb/${ARCH} /" | \
sudo tee /etc/apt/sources.list.d/libnvidia-container.list
# 5. 업데이트 및 설치
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
# 6. Docker 재시작
sudo systemctl restart docker'AI Study > AI Agent' 카테고리의 다른 글
| [AI Agent] ollama 모델 Open Web ui 연동(Docker) (0) | 2025.10.29 |
|---|---|
| Ollama를 이용한 환경 세팅 (0) | 2025.10.27 |
| [AI Agent] Langchain의 기초 (0) | 2025.10.23 |
| [AI Agent] OPEN AI의 세가지 API (0) | 2025.10.23 |
| [AI Agent] OpenAI API 사용 방법 및 기초 코드 (0) | 2025.09.25 |