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