Abdelkrim
Abdelkrim

Reputation: 2158

Azure Container generates error '503' reason 'site unavailable'

The issue

I have built a docker image on my local machine running windows 10

  1. running docker-compose build, docker-compose up -dand docker-compse logs -f do generate expected results (no error)

  2. the app runs correctly by running winpty docker container run -i -t -p 8000:8000 --rm altf1be.plotly.docker-compose:2019-12-17

  3. I upload the docker image on a private Azure Container Registry

  4. I deploy the web app based on the docker image Azure Portal > Container registry > Repositories > altf1be.plotly.docker-compose > v2019-12-17 > context-menu > deploy to web app

Azure - Deploy the web app from a docker image

  1. I run the web app and I get The service is unavailable

what is wrong with my method?

Thank you in advance for the time you will invest on this issue

docker-compose.yml

version: '3.7'
services:
  twikey-plot_ly_service:
    # container_name: altf1be.plotly.docker-container-name
    build: .
    image: altf1be.plotly.docker-compose:2019-12-17
    command: gunicorn --config=app/conf/gunicorn.conf.docker.staging.py app.webapp:server
    ports:
      - 8000:8000
    env_file: .env.staging

.env/staging

apiUrl=https://api.beta.alt-f1.be
authorizationUrl=/api/auth/authorization/code
serverUrl=https://dunningcashflow-api.alt-f1.be
transactionFeedUrl=/creditor/tx
api_token=ANICETOKEN

Dockerfile

# read the Dockerfile reference documentation
# https://docs.docker.com/engine/reference/builder

# build the docker
# docker build -t altf1be.plotly.docker-compose:2019-12-17.

# https://learn.microsoft.com/en-us/azure/app-service/containers/tutorial-custom-docker-image#use-a-docker-image-from-any-private-registry-optional

# Use the docker images used by Microsoft on Azure

FROM mcr.microsoft.com/oryx/python:3.7-20190712.5
LABEL Name=altf1.be/plotly Version=1.19.0
LABEL maintainer="[email protected]"
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
# copy the code from the local drive to the docker
ADD . /code/

# non interactive front-end
ARG DEBIAN_FRONTEND=noninteractive

# update the software repository
ENV SSH_PASSWD 'root:!astrongpassword!'

RUN apt-get update && apt-get install -y \
    apt-utils \
    # enable SSH
    && apt-get install -y --no-install-recommends openssh-server \
    && echo "$SSH_PASSWD" | chpasswd

RUN chmod u+x /code/init_container.sh

# update the python packages and libraries

RUN pip3 install --upgrade pip 
RUN pip3 install --upgrade setuptools 
RUN pip3 install --upgrade wheel
RUN pip3 install -r requirements.txt

# copy sshd_config file. See https://man.openbsd.org/sshd_config
COPY sshd_config /etc/ssh/
EXPOSE 8000 2222
ENV PORT 8000
ENV SSH_PORT 2222

# install dependencies

ENV ACCEPT_EULA=Y
ENV APPENGINE_INSTANCE_CLASS=F2
ENV apiUrl=https://api.beta.alt-f1.be
ENV serverUrl=https://dunningcashflow-api.alt-f1.be

ENV DOCKER_REGISTRY altf1be.azurecr.io

ENTRYPOINT ["/code/init_container.sh"]

/code/init_container.sh

gunicorn --config=app/conf/gunicorn.conf.docker.staging.py app.webapp:server

app/conf/gunicorn.conf.docker.staging.py

# -*- coding: utf-8 -*-
workers = 1
# print("workers: {}".format(workers))
bind = '0.0.0.0'
timeout = 600
log_level = "debug"
reload = True
print(
    f"workers={workers} bind={bind} timeout={timeout} --log-level={log_level} --reload={reload}"
)

container settings

Container settings - add command to run gunicorn

application settings

Azure - application settings (update with WEBSITES_PORT)

web app running - 'the service is unavailable'

Web App Error : the service unavailable

Kudu - 'the service is unavailable'

Kudu - the service in unavailable

Kudu - http pings on port 8000 (the app was not running)

Upvotes: 0

Views: 18036

Answers (1)

Charles Xu
Charles Xu

Reputation: 31384

What I can see is your use the wrong environment variable, it should be WEBSITES_PORT, you miss the s behind the WEBSITE. You can add it and try to deploy the image again.

And I think Azure Web App will not help you set the environment variables for you as you did in the docker-compose file with option env_file. So I suggest you create the image through command docker build and test it locally with setting the environment variables through -e. When the images run well, then you can push it to ACr and deploy it from the ACR also with the environment variables in Web App.

Or you can still use the docker-compose file to deploy your image in Web App, instead of the env_file and build with environment and image when the image is in ACR.

Upvotes: 2

Related Questions