Docker

帶有隨機日期的 Docker 容器

  • January 3, 2021

我正在執行一個基於 image 的容器linuxserver/radarr:3.0.0.3095-ls12

一旦我將標籤/版本更新到linuxserver/radarr:3.0.0.3807-ls24應用程序停止工作。

經過一點調試後,我注意到date這張圖片中的行為很奇怪:

$ docker run --rm --entrypoint "" linuxserver/radarr:3.0.0.3807-ls24 date
Fri 20 Feb 1970 03:17:15 AM UTC
$ docker run --rm --entrypoint "" linuxserver/radarr:3.0.0.3807-ls24 date
Sun 01 Mar 1970 09:09:15 AM UTC
$ docker run --rm --entrypoint "" linuxserver/radarr:3.0.0.3807-ls24 date
Thu 19 Feb 1970 09:04:59 AM UTC

但老不

$ docker run --rm --entrypoint "" linuxserver/radarr:3.0.0.3095-ls12 date
Sat 10 Oct 2020 12:15:09 AM UTC

冥想了一段時間後,假設時鐘中有某種奇怪的黑魔法,決定執行它以--privileged獲得完全/原始訪問權限

$ docker run --rm --entrypoint "" --privileged linuxserver/radarr:3.0.0.3807-ls24 date
Sat 10 Oct 2020 12:16:22 AM UTC

它執行良好(應用程序也執行良好,但對這個問題並不重要)。

我已經瀏覽docker history了這兩個圖像,但是很多COPY並且RUN curl在建構之間可能會產生不同的結果。儘管如此,我認為沒有人(圖像維護者)會想要破壞日期,所以它一定是他們無法控制的(沒有libfaketime找到)……

這是一個多架構圖像,這些結果來自樹莓派(因此圖像的 arm 建構)。在我的 amd64 linux 筆記型電腦中,date即使沒有特權,最新的圖像也能正確報告…

會是什麼呢?由於無法使用該--privileged標誌,我什至如何開始調試它?

跟進Adrian的評論(這應該是一個答案):

根據linuxserver FAQ,這是2020 年 3 月以來 docker 和 ubuntu 焦點鏡像的一個已知問題。

它似乎與過時的 libseccomp(除了核心本身之外的唯一依賴項)有關,這解釋了為什麼privileged容器不受影響(禁用系統呼叫過濾)。

他們列出了可能的解決步驟。

就我而言(作為 OP),我使用的是 Buster,因此從 buster-backports 安裝最新的 libseccomp 解決了這個問題

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC 648ACFD622F3D138
echo "deb http://deb.debian.org/debian buster-backports main" | sudo tee -a /etc/apt/sources.list.d/buster-backports.list
sudo apt update
sudo apt install -t buster-backports libseccomp2

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