Docker Apache 容器在重启后丢失静态站点数据
Docker Apache Container looses static site data after reboot
我有一个 Docker 容器,它使用 Symfony 服务一些 php-Pages。它还与数据库连接,运行良好。
根目录为/var/www/html/public,/var/www/html的大致结构如下(-files and [directories]):
[/var/www/html]
-Dockerfile
-package.json
-vendor
-src
-someotherstuff
[public]
index.php
favicon.ico
[CSS]
[Javascript]
[uploads -> this folder is a volume, users can upload their own data]
-userFileA
-userFileB
当我使用此命令启动容器时,一切正常:
docker run -d --restart always --name myContainerName -e DATABASE_URL=mysql://mysql:${DB_PW}@mysql:3306/myDbName -e APP_ENV=${ENV_TYPE} -e APP_SECRET=******** -v myapp_data:/var/www/html/public/uploads -p 127.0.0.1:82:80 --net mysql_net myId/myRepo –
在我重新启动服务器后,除了 public 中的 "uploads" 文件夹之外的所有文件都被删除,服务器文件如下所示:
[/var/www/html]
-Dockerfile
-package.json
-vendor
-src
-someotherstuff
[public]
[uploads -> this folder is a volume]
-userFileA
-userFileB
现在网站完全崩溃了,因为 public 文件夹中的 index.php 丢失了。
我不明白为什么会发生这种情况,而且只有在重新启动时才会发生。如果卷和其他文件夹之间存在冲突,那不应该也发生在初始 运行 上吗?
为什么只删除 public 内的文件而不删除 public 外的文件?我真的很困惑,我能找到的关于这个主题的大部分信息都是错误的,因为卷设置不正确,但我的卷工作正常,实际上是重启后唯一仍然正确填充的东西
这是我的 Docker 文件和我用来构建它的命令:
#docker build --tag=myId/myRepo .
#docker push myId/myRepo
FROM php:7.2-apache
ENV DB_HOST=mysql:3306 \
DB_USER=myDbUser \
DB_NAME=myDbName
COPY php.ini "$PHP_INI_DIR/php.ini"
RUN docker-php-ext-install pdo_mysql && a2enmod rewrite
COPY ./ /var/www/html/
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
VOLUME /var/www/html/public/uploads/
我的错误是在 Dockerfile
中指定了 VOLUME /var/www/html/public/uploads/
删除此行并仅使用 docker 运行 -v 将文件夹设为卷后...错误不再发生。
我有一个 Docker 容器,它使用 Symfony 服务一些 php-Pages。它还与数据库连接,运行良好。 根目录为/var/www/html/public,/var/www/html的大致结构如下(-files and [directories]):
[/var/www/html]
-Dockerfile
-package.json
-vendor
-src
-someotherstuff
[public]
index.php
favicon.ico
[CSS]
[Javascript]
[uploads -> this folder is a volume, users can upload their own data]
-userFileA
-userFileB
当我使用此命令启动容器时,一切正常:
docker run -d --restart always --name myContainerName -e DATABASE_URL=mysql://mysql:${DB_PW}@mysql:3306/myDbName -e APP_ENV=${ENV_TYPE} -e APP_SECRET=******** -v myapp_data:/var/www/html/public/uploads -p 127.0.0.1:82:80 --net mysql_net myId/myRepo –
在我重新启动服务器后,除了 public 中的 "uploads" 文件夹之外的所有文件都被删除,服务器文件如下所示:
[/var/www/html]
-Dockerfile
-package.json
-vendor
-src
-someotherstuff
[public]
[uploads -> this folder is a volume]
-userFileA
-userFileB
现在网站完全崩溃了,因为 public 文件夹中的 index.php 丢失了。
我不明白为什么会发生这种情况,而且只有在重新启动时才会发生。如果卷和其他文件夹之间存在冲突,那不应该也发生在初始 运行 上吗? 为什么只删除 public 内的文件而不删除 public 外的文件?我真的很困惑,我能找到的关于这个主题的大部分信息都是错误的,因为卷设置不正确,但我的卷工作正常,实际上是重启后唯一仍然正确填充的东西
这是我的 Docker 文件和我用来构建它的命令:
#docker build --tag=myId/myRepo .
#docker push myId/myRepo
FROM php:7.2-apache
ENV DB_HOST=mysql:3306 \
DB_USER=myDbUser \
DB_NAME=myDbName
COPY php.ini "$PHP_INI_DIR/php.ini"
RUN docker-php-ext-install pdo_mysql && a2enmod rewrite
COPY ./ /var/www/html/
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
VOLUME /var/www/html/public/uploads/
我的错误是在 Dockerfile
中指定了 VOLUME /var/www/html/public/uploads/删除此行并仅使用 docker 运行 -v 将文件夹设为卷后...错误不再发生。