docker容器內使用apt報錯E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied)以及Dockerfile文件里USER的作用


一、問題背景

1、問題描述

  docker 中執行:apt-get update

  報錯:E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied)

2、問題原因:權限不足,請使用 root 用戶

3、解決方案:0 表示 root 用戶

docker exec -it id /bin/bash // 改為
docker exec -u 0 -it id /bin/bash

二、Dockerfile 具體原因及如何解決

  使用 Dockerfile 構建一個鏡像,如果使用的 base image 設置了 USER 項,則之后的所有構建動作則切換到了 USER 指定的用戶,且 docker run 該鏡像后的用戶也是USER 指定的用戶。

  因此為了在 base image 上繼續添加構建動作,則可以使用 USER root 切換到 root 用戶執行構建,再在構建結束時使用 USER someone 切換為原用戶。

FROM someimage
...
USER root
...
USER someone
...

  比如我在 RUN apt update 之前使用 USER root 切換到 root 用戶執行構建即可。

  比如我在使用 opengauss 鏡像的時候,因為鏡像啟動 opengauss 的時候需要使用 omm 賬戶,但是我在鏡像之前需要使用 apt 去安裝 ssh,之后還需要通過 root 賬戶去啟動 ssh。所以整體用戶流程就是這樣

... USER root # 這里可以使用apt去下載或一些其他操作
... USER omm CMD ['opengauss'] # 這里得用omm賬戶去啟動opengauss
USER root   # 啟動完之后得再切回 root,以后續去開啟 ssh 服務

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM