Docker映像在AWS Fargate上不起作用,但在EC2中起作用

时间:2018-08-17 23:12:09

标签: php docker nginx amazon-ecs aws-fargate

我正在更改AWS上的基础架构,并且想在Fargate中使用Docker(ECS)。我的Docker映像基于Ubuntu,我在其中安装了所有需要的映像。我在运行PHP 7.2的NGINX上使用Laravel 5.6。我的Docker容器可在本地计算机上运行,​​并且如果我将ECS与EC2一起运行,但是当我更改为Fargate时,它将返回NGINX 500错误。我做了一些测试,我知道PHP正在运行,只有在安装Laravel应用时,错误才会发生。

由于我无法访问Fargate机器,因此我不知道如何调试。我尝试将NGINX与Loggly连接起来,但是它需要rsyslog,并且由于我使用的是Docker,因此它无法访问Ubuntu的核心。当我安装并尝试运行时,它返回:

rsyslogd: imklog: cannot open kernel log (/proc/kmsg): Operation not permitted

这是我的Dockerfile:

FROM ubuntu:latest

ENV BACKEND_PATH=/code/Backend
ENV FRONTEND_PATH=/code/Frontend

## Update
RUN apt-get update -y

## Upgrade
RUN apt-get install -y software-properties-common
RUN add-apt-repository -y ppa:certbot/certbot
RUN apt-get update -y
RUN apt-get upgrade -y
RUN apt-get dist-upgrade -y
RUN apt-get autoremove -y
RUN apt-get update -y

## Nano
RUN apt-get install -y nano

## Timezone
RUN echo "America/Sao_Paulo" > /etc/timezone && \
    apt-get install -y tzdata && \
    rm /etc/localtime && \
    ln -snf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime && \
    dpkg-reconfigure -f noninteractive tzdata && \
    apt-get clean

## Git
RUN apt-get install -y git

## NGINX
RUN apt-get install -y nginx
COPY ./nginx/app/sites-available /etc/nginx/sites-available
COPY ./nginx/app/sites-available /etc/nginx/sites-enabled
COPY ./nginx/sites /etc/nginx/sites
COPY ./nginx/ssl /ssl

## PHP
RUN apt-get install -y php-cli php-fpm php-curl php-mbstring
COPY ./php/php.ini /usr/local/etc/php

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Install libs
RUN apt-get install -y php-zip php-mysql php-gd pngquant gifsicle jpegoptim libicu-dev g++ php-intl php-xml

## Crontab
RUN apt-get install -y cron
COPY crontab newcrontab
RUN crontab newcrontab
RUN rm newcrontab

## Supervisor
RUN apt-get install -y supervisor
COPY ./supervisord /etc/supervisor/conf.d

## Certbot
RUN apt-get install -y python-certbot-nginx

## Install apps
COPY ./code/Backend /code/Backend
COPY ./code/Frontend/dist /code/Frontend/dist

RUN cd ${BACKEND_PATH} && chmod +x composer.phar && ./composer.phar self-update && php composer.phar install
RUN chmod -Rf 777 ${BACKEND_PATH}/storage
RUN chmod -Rf 777 ${BACKEND_PATH}/resources
RUN php ${BACKEND_PATH}/artisan config:clear
RUN php ${BACKEND_PATH}/artisan passport:keys

## Run!
EXPOSE 80 443

RUN service php7.2-fpm start
CMD ["/usr/bin/supervisord"]

我认为此错误与权限有关,但没有错误消息,几乎不可能知道发生了什么...有人对我如何发现它有任何想法吗?

2 个答案:

答案 0 :(得分:0)

在ServerFault上查看以下答案:https://serverfault.com/questions/691048/kernel-log-stays-empty-rsyslogd-imklog-cannot-open-kernel-log-proc-kmsg

尝试使用--privileged标志运行Fargate任务。您可以在任务定义的AWS控制台每个容器中设置此标志。它位于容器定义结尾附近的“安全性”部分。 Here's the full reference for container definitions

答案 1 :(得分:0)

我知道了。真是愚蠢的错误。创建Fargate配置时,我使用了没有权限的安全组来访问某些AWS组件,因此该应用程序无法启动。