我正在尝试设置一个Docker映像(我的Dockerfile在这里可用,很抱歉,法语自述文件:https://framagit.org/Gwendal/firefox-icedtea-docker),它使用旧版本的火狐和旧版本的Java运行旧的Java来启动VPN。我的映像确实有效,并且成功地允许我在Firefox中启动Java。
不幸的是,上述applet随后尝试在容器中运行以下命令(我只是从命令中删除了--config部件,因为这里并不重要):
INFO: launching '/usr/bin/pkexec sh -c /usr/sbin/openvpn --config ...'然后applet以错误的方式悄然退出。在研究过程中,我尝试使用具有相同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 不能在码头容器中工作?或者有什么方法可以让这个命令工作吗?
Sidenote:我对我试图运行的Java applet没有任何控制,它是一个可怕且过时的专有黑匣子,我应该在工作中使用它,我无法访问源代码,而且我必须按原样使用它。
发布于 2019-06-26 12:09:43
我已经解决了我自己的问题,在码头映像中用pkexec代替sudo,并允许无密码的sudo。
给定一个名为developer的用户创建并配置了USER语句的ubuntu映像,添加以下几行:
# 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,这样可以很好地工作。
https://stackoverflow.com/questions/56735745
复制相似问题