在容器创建时设置docker卷权限
我在docker中有一个PHP应用程序,它有一个空日志文件夹,我将其作为卷添加到docker容器中:在容器创建时设置docker卷权限,docker,logging,Docker,Logging,我在docker中有一个PHP应用程序,它有一个空日志文件夹,我将其作为卷添加到docker容器中: app: volumes: - ./app/logs:/var/log/app 但当应用程序尝试写入时,它会引发错误,因为它没有权限 我需要一种在每次创建容器时为其设置权限的方法,因此不需要手动过程,我还需要日志即使在容器被销毁时也能保持 我怎么做?对于这种情况,什么是好的做法?您的web服务器或日志的写入者没有写入/var/log/app的权限。在这里,您将从主机绑定
app:
volumes:
- ./app/logs:/var/log/app
但当应用程序尝试写入时,它会引发错误,因为它没有权限
我需要一种在每次创建容器时为其设置权限的方法,因此不需要手动过程,我还需要日志即使在容器被销毁时也能保持
我怎么做?对于这种情况,什么是好的做法?您的web服务器或日志的写入者没有写入/var/log/app的权限。在这里,您将从主机绑定挂载一个目录到一个容器中,在这种情况下,文件和目录将保持它们在主机上的权限。在主机上设置权限可以解决此问题 请参阅以下内容以执行相同操作- 或者,我建议为日志创建一个docker卷,这也可以解决让日志持久化的需求 要创建卷,请使用-
docker创建卷应用程序日志
services:
app:
volumes:
- app-logs:/var/log/app
volumes:
app-logs:
external: true
然后,您可以使用docker指令CMD
或ENTRYPOINT
对装入的卷设置正确的权限。就好像——
CMD chown-R apache:apache/var/log/app
我已经将入口点放在dockerfile中,但每次它完成时,容器都会重新启动。我不想这样,它需要继续运行,我该如何继续?好吧,这与最初的问题不同。你能把你的入口贴出来吗?您还可以查看docker日志以查看发生了什么,并尝试找出导致重新启动的原因。我以前搜索过这个,如果我使用ENTRYPOINT、CMD或COMMAND,容器的行为就像它的全部用途一样,因此当它完成时,它将重新启动(因为我使用的是restart:always)。这就是我所说的:entrypointchown-apache:apache/var/log/app