gpt4 book ai didi

docker - 有什么方法可以从Docker容器运行 “pkexec”吗?

转载 作者:行者123 更新时间:2023-12-02 19:25:26 24 4
gpt4 key购买 nike

我正在尝试使用旧版本的Firefox和旧版本的Java来设置Docker镜像(我的Dockerfile可在此处使用,对不起,法语README:https://framagit.org/Gwendal/firefox-icedtea-docker)来运行旧的Java applet来启动VPN。我的图像可以正常工作,并且成功地允许我在Firefox中启动Java applet。

不幸的是,该applet然后尝试在容器中运行以下命令(我只是从命令中删除了--config部分,因为在这里无关紧要):

INFO: launching '/usr/bin/pkexec sh -c /usr/sbin/openvpn --config ...'

然后,小程序以错误方式静默退出。在调查期间,我尝试使用带有相同Docker镜像的 pkexec运行命令,它给我以下结果:
$ sudo docker-compose run firefox pkexec /firefox/firefox-sdk/bin/firefox-bin -new-instance
**
ERROR:pkexec.c:719:main: assertion failed: (polkit_unix_process_get_start_time (POLKIT_UNIX_PROCESS (subject)) > 0)

但是我一点都不了解polkit,也无法理解此错误。

编辑:重现问题的一种更简单的方法是使用此Dockerfile:
FROM ubuntu:16.04

RUN apt-get update \
&& apt-get install -y policykit-1

然后运行:
$ sudo docker build -t pkexec-test .
$ sudo docker run pkexec-test pkexec echo Hello

这再次导致:
ERROR:pkexec.c:719:main: assertion failed: (polkit_unix_process_get_start_time (POLKIT_UNIX_PROCESS (subject)) > 0)

我是否应该得出结论pkexec在Docker容器中无法工作?还是有什么方法可以使该命令起作用?

旁注:我对尝试运行的Java applet毫无控制,这是我应该在工作中使用的可怕且过时的专有黑匣子,我无法访问其源代码,并且我必须按原样使用。

最佳答案

我已经解决了自己的问题,方法是在docker镜像中将pkexec替换为sudo,并允许使用无密码的sudo。

给定一个ubuntu docker镜像,在其中创建了一个名为developer的用户并使用USER语句进行配置,请添加以下行:

# Install sudo and make 'developer' a passwordless sudoer
RUN apt-get install sudo
ADD ./developersudo /etc/sudoers.d/developersudo

# Replacing pkexec by sudo
RUN rm /usr/bin/pkexec
RUN ln -s /usr/bin/sudo /usr/bin/pkexec

文件 developersudo包含:
developer ALL=(ALL) NOPASSWD:ALL

这将通过在没有任何密码提示的情况下对 pkexec的调用来替换在容器中运行的进程中对 sudo的任何调用,效果很好。

关于docker - 有什么方法可以从Docker容器运行 “pkexec”吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56735745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com