【问题标题】:docker container nginx start but keeps hangingdocker容器nginx启动但一直挂起
【发布时间】:2019-05-18 09:37:45
【问题描述】:

我的码头文件:

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

运行,它将永远挂在终端:

while 循环永远不会被调用。任何人都知道为什么挂起以及如何解决它?请帮忙,tks in Advanced。

【问题讨论】:

  • 也许您想启用调试日志并检查它。
  • 我希望它不是“挂起”,而是服务于流量。同样的方式,例如,最终循环中的echo 在sleep 60 完成之前不会运行,最终循环在nginx 命令完成之前不会运行。
  • 更实际地,我会在容器外运行这个同步作业。使用绑定挂载将 data 注入容器是使用这样的服务器容器的合理方法。
  • 我同意 David Maze 的观点。除此之外,这个问题还有很多解决方案。根本问题的不同措辞;问题是 nginx 正在前台运行,并且永远不会将焦点释放到要执行的脚本的其余部分。

标签: bash amazon-web-services docker nginx


【解决方案1】:

我的问题的原因是等待流量,直到 Nginx 开始释放 bash 才会调用 while 循环。但是,Nginx 会在前台运行,不会释放焦点。

我尝试的解决方案不是让 Nginx 作为前台服务运行,而是将其更改为在后台运行。由于这是我容器中唯一的服务,所以应该没有问题。

更改的代码只是在我的 dockerfile 中的以下行中删除:

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

这将使 Nginx 成为前台服务

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多