Dockerized Laravel 应用程序在 AWS Fargate 上存在卷问题

Dockerized Laravel 应用程序在 AWS Fargate 上存在卷问题

这是我的情况,我有一个 Laravel 8 应用程序,我正尝试通过 AWS Fargate 使用 AWS ECS 进行部署。

这是我的dockerfile的有用部分:

### ... Previous composer and npm stages

FROM php:8.0-cli-alpine

# Concatenated RUN commands
RUN apk add --no-cache .........

RUN mkdir -p /run/apache2 \
    && rm  -rf /tmp/*

# Apache configuration
COPY docker/fargate/apache.conf /etc/apache2/conf.d

# PHP configuration
COPY docker/fargate/php.ini /etc/php8/conf.d

# Script permission
ADD docker/fargate/docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh

# Copy files from NPM
WORKDIR /var/www/html
COPY --from=build-npm /var/www/html /var/www/html

RUN chmod -R 777 /var/www/html
COPY docker/fargate/.env.fargate /var/www/html/.env

# Run script
EXPOSE 80
ENTRYPOINT  ["/docker-entrypoint.sh"]

这是 docker-entrypoint.sh 文件

#!/bin/sh

# Cache
php artisan route:cache --quiet
php artisan config:cache --quiet

# Permissions
# On Alpine Apache's user and groups are apache
chown -R apache:apache /var/www/html
chgrp -R apache /var/www/html/bootstrap/cache
chmod -R ug+rwx /var/www/html/bootstrap/cache

# Launch the httpd in foreground
rm -rf /run/apache2/* || true && /usr/sbin/httpd -DFOREGROUND

现在,部署的应用程序运行良好,我可以浏览我的应用程序。

但是,我想在“/var/www/html”处安装一个持久卷,以便能够保留 Web 会话和其他数据。因此,该卷存在,但似乎只在运行 entrypoint 命令之前安装,这样,所有先前复制的文件都会消失。

我尝试将这些行作为第一行添加到入口点脚本中:

mkdir -p /var/www/html/bootstrap/cache
mkdir -p /var/www/html/public

它正确地创建了文件夹,因此它确认在入口点启动后卷已被挂载。

哪种方法才是实现此处所述目标的正确方法?如果需要,我想保留数据并在容器启动时覆盖它们。

答案1

AWS Fargate 不会持久保存本地存储。即使您将任务配置为使用在实例上创建的卷,实例的生命周期也与任务的生命周期相关联,因此没有必要将其持久保存(在本地存储上)。您可以通过将数据持久保存在 EFS 共享上(ECS/Fargate 与 EFS 本机集成)来实现这一点。这是 3 篇系列博客中的第 1 篇,介绍了用例并引导您了解如何进行设置。希望这对您有所帮助。

相关内容