一、問題背景
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 服務