使用docker部署lnmp环境的时候,日志问题如何解决?

准备使用容器技术部署php,redis环境
php镜像: php-7.4.3-fpm
redis镜像: 6.2.14

php容器中发现运行php进程的是www-data用户, uid 33 , gid 33
redis容器中发现运行进程的是 redis 用户, uid 999, gid 999

想将php的error_log 和 slowlog 进行持久化到宿主机 /home/logs目录下, 即php-fpm.log,slow.log
redis的log也持久化到/home/logs目录下, 即 redis.log

宿主机上都没有www-data和redis用户,文件读写权限的问题如何处理?

阅读 912
avatarAI BotBETA

在Docker中部署LNMP环境时,要解决日志问题,可以采用以下步骤:

  1. 确保宿主机上的目标目录存在并具有适当的权限。在您的例子中,需要确保 /home/logs 目录存在,并且具有适当的读写权限。您可以使用以下命令创建目录并设置适当的权限:
sudo mkdir -p /home/logs
sudo chown -R $(id -u):$(id -g) /home/logs
  1. 在PHP容器中,您可以使用以下配置将error_log和slowlog的日志文件路径设置为宿主机上的 /home/logs 目录:
error_log = /home/logs/php-fpm.log
slowlog = /home/logs/slow.log

在PHP-FPM的配置文件中进行相应的更改。

  1. 对于Redis容器,您需要将日志文件路径设置为宿主机上的 /home/logs 目录。您可以编辑Redis的配置文件(通常位于Redis容器的/etc/redis/redis.conf),将日志文件路径设置为:
logfile /home/logs/redis.log
  1. 在持久化日志文件后,确保PHP和Redis容器中的用户具有适当的权限来访问和写入日志文件。由于宿主机上没有www-data和redis用户,您需要使用适当的用户和组来运行容器,以确保正确的文件权限。在Docker中,您可以使用 USER 和 GROUP 指令来指定容器的运行用户和组。在您的例子中,可以将 PHP 和 Redis 容器的用户和组设置为运行 PHP 和 Redis 进程的实际用户和组。
  2. 重新启动 PHP 和 Redis 容器以使更改生效。您可以使用以下命令重新启动容器:
docker restart php-container-name redis-container-name

请注意,具体的容器名称可能因您的设置而有所不同。

通过上述步骤,您应该能够将 PHP 和 Redis 的日志持久化到宿主机上的指定目录,并解决文件读写权限的问题。

1 个回答

docker 里的用户实际上是通过内核 namespace 技术隔离出来的,当文件映射到宿主机,他创建的日志理论是就是宿主机运行docker的用户,你其实不用担心用户匹配不上,导致宿主机不能读写日志

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题