0

I am building my first customs Docker with Docker compose and I feel I am very close to finishing it but I have having an issue with what seem to be the entrypoint

FYI i am tryng to deploy a django app with postgres, nginx, certbot, letsencrypt

this is what I am seeing:

certbot_1 | /data/entrypoint.sh: exec: line 14: certbot: not found nginx_1 | /data/entrypoint.sh: exec: line 14: run: not found

EDIT: I was able to make them run with the editted code but Ngnix exits with a code 0 and I don't know why and wont run

I have tried changing path with no luck

I am not sure what I am doing wrong

any advice you can provide would be great!

docker compose file:

version: '3.8'

services:
  web:
    build: .
    command: gunicorn FleetOptimal.wsgi:application --bind 0.0.0.0:8000
    environment:
    - TZ=America/Toronto
    volumes:
      - /home/littlejiver/src/FleetOptimal/FleetOptimal/FleetOptimal/:/manage/
      - /home/littlejiver/src/FleetOptimal/FleetOptimal/:/data/
      - /home/littlejiver/src/FleetOptimal/FleetOptimal/FleetOptimal/staticfiles/:/static_volume/
      - /home/littlejiver/src/FleetOptimal/FleetOptimal/FleetOptimal/images/:/media_volume/
    expose:
      - 8000
    env_file:
      - ./.env.dev
    depends_on:
      - db

  db:
    image: postgres:13.0-alpine 
    volumes:
      - /home/littlejiver/docker/postgres/postgres_data:/postgres_data/
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Canada/Toronto
      - POSTGRES_USER=someusername
      - POSTGRES_PASSWORD=@somepassword
      - POSTGRES_DB=somedb

  nginx-proxy:
    tty: true
    image: nginx:latest
    container_name: nginx-proxy
    build: .
    command: nginx -g "daemon off"
    restart: always
    environment:
      - NGINX_DOCKER_GEN_CONTAINER=nginx-proxy-letsencrypt
    ports:
      - 443:443
      - 80:80
    volumes:
      - /home/littlejiver/src/FleetOptimal/FleetOptimal/:/data/
      - /home/littlejiver/src/FleetOptimal/FleetOptimal/FleetOptimal/staticfiles/:/static_volume/
      - /home/littlejiver/src/FleetOptimal/FleetOptimal/FleetOptimal/images/:/media_volume/
      - certs:/etc/nginx/certs
      - html:/usr/share/nginx/html
      - vhost:/etc/nginx/vhost.d
      - /var/run/docker.sock:/tmp/docker.sock:ro
    depends_on:
      - web

  nginx-proxy-letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    env_file:
      - ./.env.dev
    environment:
      - NGINX_DOCKER_GEN_CONTAINER=nginx-proxy-letsencrypt
    volumes:
      - /home/littlejiver/src/FleetOptimal/FleetOptimal/:/data/
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - certs:/etc/nginx/certs
      - html:/usr/share/nginx/html
      - vhost:/etc/nginx/vhost.d
      - acme:/etc/acme.sh
    depends_on:
      - nginx-proxy


volumes:
  postgres_data:
  static_volume:
  media_volume:
  certs:
  html:
  vhost:
  acme:

DockerFile for Ngnix:

FROM nginx:latest
COPY vhost.d/default /etc/nginx/vhost.d/default
COPY custom.conf /etc/nginx/conf.d/custom.conf

DockerFile for Web:

   ###########
# BUILDER #
###########

# pull official base image
FROM python:3.9.6-alpine as builder

# set work directory
WORKDIR /manage

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install psycopg2 dependencies
RUN apk update \
    && apk add postgresql-dev gcc python3-dev musl-dev

# lint
RUN apk add zlib-dev jpeg-dev gcc musl-dev
RUN pip install --upgrade pip
# RUN pip install flake8==3.9.2
COPY . .
# RUN flake8 --ignore=E501,F401 /manage

# install dependencies
COPY ./requirements.txt .
RUN pip wheel --no-cache-dir --no-deps --wheel-dir /usr/src/app/wheels -r requirements.txt


 



   #########
        # FINAL #
        #########
        
        # pull official base image
        FROM python:3.9.6-alpine
        
        # create directory for the app user
        
        # create the app user
        RUN addgroup -S littlejiver && adduser -S littlejiver -G littlejiver
        
        # create the appropriate directories
        ENV HOME=/manage
        ENV APP_HOME=/manage
        WORKDIR $APP_HOME
        
        # install dependencies
        RUN apk add zlib-dev jpeg-dev gcc musl-dev
        COPY --from=builder /usr/src/app/wheels /wheels
        COPY --from=builder /manage/requirements.txt .
        RUN pip install --no-cache /wheels/*
        
        # copy entrypoint.prod.sh
        COPY ./entrypoint.sh .
        RUN sed -i 's/\r$//g'  $APP_HOME/entrypoint.sh
        RUN chmod +x  $APP_HOME/entrypoint.sh
        
        # copy project
        COPY . $APP_HOME
        
        # chown all the files to the app user
        RUN chown -R littlejiver:littlejiver $APP_HOME
        
        # change to the app user
        USER littlejiver
        
        WORKDIR /manage
        
        # run entrypoint.prod.sh
        ENTRYPOINT ["sh", "/data/entrypoint.sh"]

entrypoint.sh

#!/bin/sh

    if [ "$DATABASE" = "postgres" ]
    then
        echo "Waiting for postgres..."
    
        while ! nc -z $SQL_HOST $SQL_PORT; do
          sleep 0.1
        done
    
        echo "PostgreSQL started"
    fi
    
    exec "$@"

Thanks -littlejiver

roughly based of this guide:

littlejiver
  • 255
  • 2
  • 13
  • Your `CMD [ "run" ]` is being passed to `entrypoint.sh`. What is `run`? Is that what you want? – Daniel Scott Apr 06 '22 at 22:10
  • to be honest I am not sure, I have updated the code based on edits i made but now I can't get nginx to run it will always exit with a zero code, i think it has something to do with the entrypoint... I am super new to all of this....any advice you could provide wouid be great ..... thanks! – littlejiver Apr 08 '22 at 10:06
  • I don't know nginx, but looks like you might be missing a semi-colon? https://stackoverflow.com/questions/18861300/how-to-run-nginx-within-a-docker-container-without-halting – Daniel Scott Apr 08 '22 at 11:27

0 Answers0