You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose构建时python3.6-minimal权限错误修复咨询

问题描述

运行docker-compose up -d构建镜像时失败,使用的Dockerfile如下:

FROM ubuntu:18.04

ARG PKGS
ARG SCRIPTS
ARG EXEC

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update 
RUN apt-get install -y openssh-server iproute2 iptables inetutils-ping vim nano net-tools dnsutils python3-scapy python3-flask traceroute $PKGS

## ssh ##

RUN mkdir /var/run/sshd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

# exec
RUN eval ${EXEC}

# bin
COPY bin/level* /usr/local/bin/
COPY bashrc /root/.bashrc

# entrypoint
COPY entrypoint.sh /usr/local/bin/
RUN sed -i -- "s^# startup scripts^${SCRIPTS}^g" /usr/local/bin/entrypoint.sh

ENTRYPOINT /usr/local/bin/entrypoint.sh

构建时出现如下错误:

Traceback (most recent call last):
  File "/usr/lib/python3.6/py_compile.py", line 186, in <module>
    sys.exit(main())
  File "/usr/lib/python3.6/py_compile.py", line 178, in main
    compile(filename, doraise=True)
  File "/usr/lib/python3.6/py_compile.py", line 143, in compile
    importlib._bootstrap_external._write_atomic(cfile, bytecode, mode)
  File "<frozen importlib._bootstrap_external>", line 113, in _write_atomic
PermissionError: [Errno 13] Permission denied: '/usr/lib/python3.6/__pycache__/__future__.cpython-36.pyc.140199285249616'
dpkg: error processing package python3.6-minimal (--configure):
 installed python3.6-minimal package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
 python3.6-minimal
E: Sub-process /usr/bin/dpkg returned an error code (1)
The command '/bin/sh -c apt-get install -y openssh-server iproute2 iptables inetutils-ping vim nano net-tools dnsutils python3-scapy python3-flask traceroute $PKGS' returned a non-zero code: 100
ERROR: Service 'node1' failed to build : Build failed

已尝试更换Ubuntu版本但无效,拆分apt-get install命令后发现openssh-server、python3-flask和python3-scapy这几个包会触发该错误。

解决方案

方法一:阻止Python生成字节码文件

错误根源是Python在安装后编译字节码时无权限写入__pycache__目录,添加环境变量PYTHONDONTWRITEBYTECODE=1即可禁止生成.pyc文件,从根源避免权限问题。同时优化apt命令减少镜像层并清理缓存:

修改后的Dockerfile核心片段:

FROM ubuntu:18.04

ARG PKGS
ARG SCRIPTS
ARG EXEC

ENV DEBIAN_FRONTEND=noninteractive
ENV PYTHONDONTWRITEBYTECODE=1  # 关键:禁止生成.pyc文件

# 合并apt命令,减少镜像层并清理缓存
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        openssh-server iproute2 iptables inetutils-ping vim nano net-tools \
        dnsutils python3-scapy python3-flask traceroute $PKGS && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

方法二:修复dpkg状态(可选)

如果仍存在dpkg配置残留问题,可在apt安装前添加修复命令:

RUN apt-get update && \
    dpkg --configure -a || true && \  # 强制修复已安装包的配置
    apt-get install -f -y && \
    apt-get install -y --no-install-recommends \
        openssh-server iproute2 iptables inetutils-ping vim nano net-tools \
        dnsutils python3-scapy python3-flask traceroute $PKGS && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

说明

  • PYTHONDONTWRITEBYTECODE=1:彻底跳过Python编译字节码的操作,直接避免权限写入错误。
  • 合并apt-get update和install:避免因缓存过期导致的安装失败,同时减少镜像层数。
  • --no-install-recommends:只安装必要依赖,降低出错概率和镜像体积。
  • 清理缓存:减小镜像大小,避免残留文件引发的未知问题。

内容的提问来源于stack exchange,提问作者Ste.02

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:29:55