Докер контейнер nginx запускается, но продолжает висеть - PullRequest
0 голосов
/ 18 декабря 2018

мой dockerfile:

FROM AWS_ECR_IMAGE

RUN apt-get update && apt-get install -y \
        cron \
        python-dev \
        git \
        zlib1g-dev \
        libffi-dev \
        libssl-dev \
        autotools-dev \
        automake \
        libbz2-dev \
        libaio-dev \
        libsasl2-dev \
        python-pip
RUN pip install boto boto3 awscli

# Install Nginx.
RUN \
  add-apt-repository -y ppa:nginx/stable && \
  apt-get update && \
  apt-get install -y nginx && \
  rm -rf /var/lib/apt/lists/* && \
  echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \
  chown -R www-data:www-data /var/lib/nginx

# Define mountable directories.
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]

# Define working directory.
WORKDIR /etc/nginx

# Define default command.
CMD ["nginx"]

COPY nginx_conf /etc/nginx/sites-available/default

# Start service, replace server name, update web ui
COPY main.sh /opt/annotation-pipeline-docs/main.sh
RUN chmod 0755 /opt/annotation-pipeline-docs/main.sh
ENTRYPOINT [ "sh", "-c", "/opt/annotation-pipeline-docs/main.sh" ]

# Expose ports.
EXPOSE 80

И мой bash-файл точки входа (мне нужно сначала обновить имя сервера при запуске контейнера):

#!/bin/bash -e
/usr/local/bin/aws s3 sync s3://${S3_Bucket}/docs/${ENVIRONMENT}/HEAD/ /var/www/html/

if [ "$ENVIRONMENT" == "prod" ]
then
  sed -i.bak "s/REPLACE_ME/example.com/g" /etc/nginx/sites-available/default
else
  sed -i.bak "s/REPLACE_ME/example-$ENVIRONMENT.com/g" /etc/nginx/sites-available/default
fi

nginx 

while true; do
  sleep 60
  echo "s3 sync again:"
  /usr/local/bin/aws s3 sync s3://${S3_Bucket}/docs/${ENVIRONMENT}/HEAD/ /var/www/html/
done

Проблема возникает, когда

nginx

работает, он будет висеть в терминале вечно: enter image description here

и цикл while никогда не будет вызван.Кто-нибудь знает, почему зависает и как его решить?Пожалуйста, помогите, ткс в продвинутом.

1 Ответ

0 голосов
/ 18 декабря 2018

Причиной моей проблемы является ожидание трафика, цикл while не будет вызываться до тех пор, пока nginx не освободит bash.Однако nginx будет работать на переднем плане и не снимать фокус.

Решение, которое я попробовал, состоит в том, чтобы вместо того, чтобы nginx работал в качестве службы переднего плана, я изменил его запуск в фоновом режиме.Поскольку это единственный сервис в моем контейнере, у него не должно возникнуть проблем.

измененный код просто удаляется ниже строки в моем dockerfile:

echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \

, что делает nginx какобслуживание переднего плана

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...