我如何允许www-data改变文件夹权限时使用Docker和pdftohtmlEX使文件夹?



EDIT:我发现问题了我正在使用用户/组1000:1000,但它需要是1:1,将正确的用户添加到正确的组后。多棒啊。希望其他人能发现这一点,这样可以节省我在错误的问题上浪费的时间lol

我有Docker(所以我可以使用pdf2htmllex)运行在Lightsail实例上用于开发目的。使用

可以很好地工作:
exec('docker run --rm -v ' . $fileLoc . ':/pdf -u 1000:1000 bwits/pdf2htmlex pdf2htmlEX --embed cfijo --split-pages 1 --zoom 1 --dest-dir presentations/' . $presName . ' --page-filename content-%d.page temp_pdf/' . $filename . ' 2>&1', $output, $retVal);

注意:我必须告诉Docker是用户1000:1000,这样它才能创建文件夹和文件。

问题是,文件夹$presName最终有700的chmod,它需要是755,而所有的文件是一个可爱的644棒极了。我这辈子都无法获得这些权限来更新…

我已经试过了所有我能想到的/在网上找到的命令:

exec('docker run --rm -u 1000:1000 chmod 755 ' . $fileLoc . '/presentations/' . $presName);
exec('sudo chmod 755 ' . $fileLoc . '/presentations/' . $presName);
exec('echo my-password-was-here | /usr/bin/sudo -S chmod 755 ' . $fileLoc . '/presentations/' . $presName);
exec("bash -lc 'echo my-password-was-here | /usr/bin/sudo -S chmod 755 ' . $fileLoc . '/presentations/' . $presName'");

这些都不起作用。

"没问题!"我大声地想,我只要用PHP让文件夹具有正确的权限,这样它就已经存在了……但是可惜的是,PHP甚至不能使用mkdir

我对这一点很不了解,因为我从来没有使用过Docker,而且,尽我所能,有些东西是容器,有些东西是用户。¯()

我花了好几天的时间来思考这个问题。我只是(哈哈"只是")希望文件夹是755!这就是我所需要的…

有一个简单的解决方案吗?我可以在终端机里输入什么吗?我可以修改Docker配置来解决这个问题吗?或者这将是非常复杂的,我将不得不消化所有的Docker文档,成为一个专家?

[Edit: I use this https://hub.docker.com/r/bwits/pdf2htmlex/]

我相信当您为容器构建映像时,您需要在映像过程结束时将文件放在WORK DIR命令中。如果你通过Docker查看这个文档,他们建议使用WORK DIR命令,以便能够以正确的用户权限运行东西。

链接到文档:https://docs.docker.com/engine/reference/builder/#workdir

引用自Docker: " WORKDIR指令为Dockerfile中跟随它的任何RUN, CMD, ENTRYPOINT, COPY和ADD指令设置工作目录。如果WORKDIR不存在,即使在后续的Dockerfile指令中没有使用它,它也会被创建。">

命令:WORKDIR /warmup

我使用这个命令在容器中运行。net,只需确保在您执行WORKDIR命令后,您将完成CMDENTRYPOINT,以便Docker知道从哪里运行以及传递给它的内容。

而且,我知道你是在Light sale上建立的,但是Elton Stoneman有一本很棒的书叫做Docker on Windows,这也是我对Docker了解最多的地方。我怎么推荐这本书都不为过。

最新更新