Docker

無法 ping(權限被拒絕)

  • January 10, 2022

我的 docker 安裝有問題。出於某些安全原因,我配置了我的“daemon.json”,將命名空間切換到另一個使用者(userns-remap)。現在我遇到的問題是,如果我執行一個容器(使用切換的使用者上下文 ( USER containeruser) 並嘗試 ping 同一容器網路中的另一個容器,我會收到以下錯誤:

$ ping 172.16.0.3
PING 172.16.0.3 (172.16.0.3): 56 data bytes
ping: permission denied (are you root?)

我已經用 AppArmor 嘗試了幾件事,分配了更多的功能等等。但沒有任何幫助解決這個問題。

執行的鏡像是一個沒有任何修改的 alpine linux。

你有解決我的問題的方法嗎?

TLDR;

apk add iputils

解釋

Alpine 基於busybox,它在單個二進製文件中實現了linux 常用命令。如果您查看/bin基本 alpine 映像上的目錄,您會看到該ping命令(與其他命令一樣)是指向/bin/busybox

要作為普通使用者執行,ping需要設置suid 位。您可能很想在符號連結(即chmod u+s /bin/ping)上設置 suid 位。但這實際上會在busybox二進製文件上設置它,因此在所有其他註冊為符號連結的命令上,這將是一個安全漏洞。

幸運的是,iputilsalpine 中有一個包,其中包含ping. 如果您安裝它,它將用一個普通的二進製文件替換符號連結,該二進製文件擁有每個人都可以執行的必要權限。RUN只需在 Dockerfile的一行中添加上述必要的命令。

引用自:https://serverfault.com/questions/1001174