windows 환경에서 Docker를 실행할 작업이 생겼습니다.

windows local에 있는 어느 폴더와 docker container간 파일을 주고받으며 이 파일을 파이썬으로 처리하는 작업을 수행합니다

 


Dockerfile 작성

container는 ubuntu base로 python이 설치된 환경으로 생성하였습니다.

# Ubuntu 최신 버전을 기반 이미지로 사용
FROM ubuntu:latest

# 패키지 목록 업데이트 및 필요한 패키지 설치
# --no-install-recommends 옵션 추가
RUN apt-get update && apt-get install -y \
    git \
    vim \
    python3 \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*  # apt-get clean과 유사

# 작업 디렉토리 설정
WORKDIR /workspace

# 컨테이너 시작 시 실행될 명령어
# 여기서는 bash 쉘을 실행하도록 설정합니다.
CMD ["bash"]

 


Docker Image Build

docker build -t ubuntu_custom .

Docker Container 실행

이 부분이 자칫 헷갈릴 수 있는 부분입니다.

'C:\CPImage'라는 경로와 바인딩하기 위해 wsl에서는 해당 경로를 '/mnt/c/CPImage'로 접근할 수 있습니다.

그리고 ubuntu container의 '/app'경로와 바인딩하는 예시입니다.

docker run -d --name ubuntu_container -v /mnt/c/CPImage:/app ubuntu_custom tail -f /dev/null

 

 

바인딩한 윈도우 로컬 경로 폴더 조회
바인딩한 컨테이너의 '/app'경로 폴더 조회

 

각 경로에서 파일을 서로 생성해보면 조회가 되는 것으로 정확히 바인딩 된 것을 확인할 수 있습니다

 flask로 간단한 웹 페이지를 만들어서 Local 환경에서 테스트한 후, 서버에 docker container로 서비스를 가동하니 접속이 안되는 문제가 발생하였습니다.

if __name__ == '__main__':
    cache.clear()
    app.run(debug=True, port=8888)

1. port binding도 잘 해주었고,

2. host도 오타없이 잘 작성하였고,

3. python 파일도 정상적으로 실행되고 있었습니다.

 


host='0.0.0.0'

해결책은 간단했습니다.

 

Flask 애플리케이션을 실행할 때, Flask 서버는 기본적으로 127.0.0.1 또는 localhost에서만 연결을 허용합니다.

따라서 "Running on http://127.0.0.1:8888"과 같이 로컬 주소에서만 서버가 실행되는 것이 기본 동작입니다.

하지만 "Running on all addresses (0.0.0.0)" 또는 "Running on http://172.17.0.2:8100"와 같이 모든 주소에서 서버를 실행하려면 Flask 애플리케이션을 아래와와 같은 코드로 실행해야합니다.

if __name__ == '__main__':
    cache.clear()
    app.run(debug=True, host='0.0.0.0', port=8888)

바로 run()함수에 'host = '0.0.0.0'으로 지정해두니 서버 호스트로도 접속이 정상적으로 이루어졌습니다.

 

아래는 chat-gpt가 답해준 내용입니다. 훌륭한 설명이네요.

이렇게 하면 Flask 서버가 모든 주소 (0.0.0.0)에서 클라이언트 연결을 허용하며, 외부 클라이언트도 액세스할 수 있게 됩니다. 
단, 이렇게 서버를 열면 보안상 주의가 필요하며, 특히 개발 환경에서만 사용해야 합니다. 
production(운영) 환경에서는 보안 검토와 관련된 설정을 고려해야 합니다.
따라서 Flask 애플리케이션을 모든 주소에서 실행하고 싶다면 위의 코드를 Flask 애플리케이션 코드 안에서 사용하십시오.

 

python flask로 구현한 웹 페이지를 가상화공간(docker container)에서 서비스하려할 때 위와 같은 문제가 발생하시는 분들께 도움이 되었으면 합니다.

 

python 코드가 실행되는 ubuntu기반의 docker container를 생성할 때 발생하는 오류입니다.


ERROR: failed to solve: process "/bin/sh -c apt-get install -y python3 python3-pip" did not complete successfully: exit code: 100
# base image
FROM ubuntu:latest

# 필요한 패키지 설치
RUN apt-get install -y python3 python3-pip

RUN pip3 install -r requirements.txt

 위 처럼 Python이 설치된 Ubuntu환경의 container를 생성하고자 Dockerfile을 작성하였습니다.

별로 문제가 없는 것 처럼 보이지만 Dockerfile에 어떤 문제가 있을까요.

 해결책은 아주 간단합니다.

Ubunut는 패키지를 설치하기전에 아래 명령어가 먼저 실행되어야 합니다.

apt-get update

 

그래서 아래처럼 수정하면 이상없이 Dockerfile이 build 됩니다.

# base image
FROM ubuntu:latest

# 필요한 패키지 설치
RUN apt-get update
RUN apt-get install -y python3 python3-pip

(이하 생략)

+ Recent posts