运行 dpkg -i 时 Docker 容器内出现“logname:无登录名”

tra*_*att 3 dpkg docker

我需要在 Ubuntu 18.04 Docker 容器内安装 SDK 包,但经常遇到这个问题:

theuser@e9fa4f39e0f0:/src/spinnaker$ sudo dpkg -i libspinnaker_2.2.0.48_arm64.deb
(Reading database ... 52013 files and directories currently installed.)
Preparing to unpack libspinnaker_2.2.0.48_arm64.deb ...
Unpacking libspinnaker (2.2.0.48) over (2.2.0.48) ...
logname: no login name
dpkg: warning: old libspinnaker package post-removal script subprocess returned error exit status 1
dpkg: trying script from the new package instead ...
logname: no login name
dpkg: error processing archive libspinnaker_2.2.0.48_arm64.deb (--install):
 new libspinnaker package post-removal script subprocess returned error exit status 1
logname: no login name
dpkg: error while cleaning up:
 new libspinnaker package post-removal script subprocess returned error exit status 1
Errors were encountered while processing:
 libspinnaker_2.2.0.48_arm64.deb
Run Code Online (Sandbox Code Playgroud)

我尝试了各种解决方法,设置 USER、SUDO_USER、LOGNAME,使用“-u”开关运行容器到我的 uid/gid,并且都得到相同的日志名错误。有解决办法吗?

小智 5

我在最新的 spinnaker api 版本中遇到了同样的问题。

问题是 postinst 调用 logname 来查找您的主目录在哪里,以安装一些配置文件。在 docker 构建上下文中,没有登录用户。

我的令人震惊的黑客行为是用“echo root”覆盖日志名可执行文件。例如:

# Install spinnaker sdk https://www.flir.com/support-center/iis/machine-vision/downloads/spinnaker-sdk-and-firmware-download/
COPY external/spinnaker/* spinnaker/
# Pre-answer the apt install prompts
COPY spinnaker.dat .
RUN cat spinnaker.dat >> /var/cache/debconf/config.dat
# Fake out logname (no login context in docker build)
RUN echo "echo root" > /usr/bin/logname
# Install other postinst dependencies
RUN DEBIAN_FRONTEND=noninteractive apt install -y iputils-ping wget
RUN DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends ./spinnaker/lib*.deb && rm -rv spinnaker
Run Code Online (Sandbox Code Playgroud)

spinnaker.dat 的内容(以避免 preinst 脚本提示)是:

Name: libspinnaker/accepted-flir-eula
Template: libspinnaker/accepted-flir-eula
Value: true
Owners: libspinnaker
Flags: seen

Name: libspinnaker/error-flir-eula
Template: libspinnaker/error-flir-eula
Owners: libspinnaker

Name: libspinnaker/present-flir-eula
Template: libspinnaker/present-flir-eula
Value: 
Owners: libspinnaker
Flags: seen
Run Code Online (Sandbox Code Playgroud)