1

我正在尝试使用旧版本的 Firefox 和旧版本的 Java设置 Docker 映像(我的 Dockerfile 可在此处获得,抱歉法语自述文件: https ://framagit.org/Gwendal/firefox-icedtea-docker)运行旧的 Java 小程序来启动 VPN。我的图像确实有效,并且成功地允许我在 Firefox 中启动 Java 小程序。

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

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

然后小程序以错误方式静默退出。在调查时,我尝试使用pkexec相同的 Docker 映像运行命令,它给了我这个结果:

$ 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 小程序,它是一个可怕且非常过时的专有黑匣子,我应该在工作中使用它,我无法访问源代码,而且我必须按原样使用。

4

1 回答 1

2

我通过在 docker 映像中替换pkexecby并允许无密码 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没有任何密码提示,效果很好。

于 2019-06-26T12:09:43.297 回答