인프런 커뮤니티 질문&답변

jjack님의 프로필 이미지

작성한 질문수

(2024년) 파이썬 알고리즘 트레이딩 파트2: Interactive Brokers API를 활용한 실시간 알고리즘 트레이딩

IBKR 데스크탑 API 연결하기

docker port

24.10.23 17:17 작성

·

32

·

수정됨

0

안녕하세요, docker 실습을 같이 해보려고 했는데 문제가 있습니다.

 

Dockerfile

FROM continuumio/miniconda3:latest
RUN mkdir -p /quant

이미지 빌드 후

docker run -d -t —name quant -v $(pwd)/quant:/quant -p 7497:7497 miniconda3:latest

컨테이너를 띄운 후에 진행했습니다.

conda 가상환경 설정, 주피터 커널 연결을 마치고 노트북 실행 시 ib.connect() 셀 부분에서 발생한 문제입니다.

 

"Connect call failed ('127.0.0.1', 7497)"

위의 run 명령어와 같이 해주었을 때에는 desktop의 trader workstation에서 포트를 사용중이라는 팝업이 뜹니다.

dockerfile에서 expose 만 설정(EXPOSE 1234) 해 주었을 때에도 동일하게 연결이 안됐습니다.

 

포트 설정을 어떻게 해주어야 하는지 잘 모르겠습니다..

도커, 포트 포워딩에 대한 이해가 부족해서 구글링 해 봐도 잘 이해가 되지 않아서 도움 요청 남깁니다.

답변 2

0

다니엘님의 프로필 이미지
다니엘
지식공유자

2024. 10. 24. 08:07

안녕하세요, jjack 수강생님!

문의해 주신 내용에 대해 확인해보니, 현재 진행 중인 수업의 주제와는 조금 다른 부분인 것 같습니다. 물론 제가 도움을 드릴 수는 있지만, 수업의 범위를 벗어난 내용이라 다루기가 어려울 수 있어요.

혹시 다시 한번 확인해주시고, 수업과 관련된 내용이라면 언제든지 편하게 말씀해 주시면 감사하겠습니다.

다니엘 드림

jjack님의 프로필 이미지
jjack
질문자

2024. 10. 24. 11:04

네, 간단하게 해결되는 문제인가 했는데 더 다양한 이해가 필요한가보네요. 더 공부해보겠습니다. 답변 감사합니다!

 


저는 로컬에 미니콘다를 설치하고싶지 않아서 도커를 이용했습니다. 위의 질문은 이 부분을 수정해서 해결했습니다.

# ib.connect()
ib.connect('host.docker.internal')

https://stackoverflow.com/questions/77764671/retrieve-data-from-interactive-brokers-from-inside-a-docker-container
혹시라도 비슷한 문제를 겪는 분 계시면 참고하면 좋을 것 같아서 가져왔습니다.

0

인프런 AI 인턴님의 프로필 이미지

2024. 10. 23. 17:21

안녕하세요, 인프런 AI 인턴입니다. jjack님.

Docker 컨테이너에서의 포트 연결 문제로 인해 어려움을 겪고 계신 것 같습니다. Docker에서 포트를 다른 환경과 연결할 때 일반적으로 발생할 수 있는 문제와 그 해결 방법을 설명드리겠습니다.

포트 연결 문제 해결하기

  1. 포트 충돌 확인:

    • 우선적으로 호스트 운영체제에서 해당 포트(7497)가 다른 애플리케이션에서 사용 중인지 확인해 보셔야 합니다. 터미널에서 lsof -i :7497 명령어를 사용하여 어떤 프로세스가 포트를 사용 중인지 확인할 수 있습니다.
    • 사용 중인 프로세스가 있다면 종료하시거나 다른 포트를 사용해 보세요.
  2. docker run 명령어 수정:

    • docker run 명령어에서 -d 플래그는 백그라운드 모드를 의미하며, 디버깅 정보를 즉시 확인하기 어려울 수 있습니다. 테스트 시에는 -d 플래그 없이 실행해 보시면 추가적인 오류 메시지를 확인하는 데 도움이 됩니다.
  3. Dockerfile의 EXPOSE 확인:

    • Dockerfile에서 EXPOSE 명령어는 컨테이너가 내부적으로 사용하는 포트를 명시합니다. 이 명령어 자체가 포트 포워딩 기능을 담당하는 것은 아니며, docker run -p와 함께 사용해야 실제 포트가 외부에 노출됩니다.
    • 아래와 같이 Dockerfile에 포트를 노출하고, run 커맨드에서 동일한 포트를 매핑합니다.
   FROM continuumio/miniconda3:latest
   RUN mkdir -p /quant

   # Jupyter 및 TWS 포트 노출
   EXPOSE 8888 7497
  1. Port Mapping 정확히하기:
    • docker run 시 호스트의 특정 포트를 컨테이너의 포트에 매핑하였는지 확인합니다. 예를 들어, 호스트의 포트 7497을 컨테이너의 7497 포트와 연결 시도합니다.
   docker run -p 7497:7497 -p 8888:8888 -v $(pwd)/quant:/quant --name quant continuumio/miniconda3:latest

추가 참고 자료:

  • Docker 공식 문서의 포트 설명을 참고해 보시면 네트워크 설정에 대한 이해를 높일 수 있습니다.

유사한 문제 해결 방법으로는 Dev-Container에서 GPU 활용하기와 같은 게시물을 참고하시는 것도 도움이 될 수 있습니다. 이 글에서는 도커 환경의 설정과 관련한 다양한 조언을 제공합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

jjack님의 프로필 이미지

작성한 질문수

질문하기