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

JJ님의 프로필 이미지
JJ

작성한 질문수

도커 쓸 땐 필수! 도커 컴포즈

[개인 실습 해설] - flask(python) + redis 서비스 실행하기

[Q : 섹션3. flask + redis 서비스 실행하기 실습편] Internal Server Error

작성

·

714

1

브라우저에서 접속을 시도하면 internal server error 라고 뜨면서 정상작동하지 않습니다. 위 로그 기록 참고하셔서 조치 방법을 알려주시면 고맙겠습니다. 

답변 2

0

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

확인이 늦었습니다^^;

===docker-compose.yml===

version: '3'
services:
    my_flask:
        image: flask-redis
        ports:
            - 50027:5000
    my_redis:
        image: redis


===app.py===

import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)


def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)


@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)


===Dockerfile===
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]
너굴님의 프로필 이미지
너굴
지식공유자

services에서 redis 서비스의 이름을 'my_redis'라고 하셨네요~ 서비스의 이름이 곧 서버 이름이라고 보시면 되는데요. app.py 파일에 host='redis'라고 적어두었기 때문에 'redis'로 접속하려다 실패하는 상황입니다.

 이 부분을 docker-compose.yml의 'my_redis'를 'redis'로 바꿔주시기만 하면 잘 작동하겠습니다. (아니면 반대로 app.py 파일의 'redis'를 'my_redis'로 바꾸셔도 되겠습니다.)

0

너굴님의 프로필 이미지
너굴
지식공유자

오류 로그를 보니 웹 서버가 redis에 접속하지 못한 상황으로 보입니다.

작성하신 docker-compose.yml 파일을 적어주시면 문제점이 무엇인지 살펴보는 데 도움이 되겠습니다.

JJ님의 프로필 이미지
JJ

작성한 질문수

질문하기