Docker

安裝時“沒有這樣的文件或目錄”,使用 golang:alpine Docker 映像建構

  • May 25, 2019

我創建了LinuxServer.io的 docker-transmission 鏡像的一個分支,添加了對 Google Cloud Storage 的支持。

我使用Ernest (chiaen) 的 docker-gcsfuse項目來建構 gcsfuse,即提取他的部分Dockerfile並添加到我自己的. gcsfuse 是使用golang:alpine圖像建構的。

映像建構成功(包括gcsfuse;Dockerfile 指示僅將 gcsfuse 複製到/usr/local/bin,我檢查了可執行位置;此外,/dev/fuse 已從主機端正確公開)。但是,如果目錄實際存在並且已經設置了正確的權限(設置在/etc/cont-init.d/20-config) ,則gcsfuse拒絕掛載,並且日誌輸出。我什至嘗試從 shell 執行,但仍然失敗。Mount: stat /donwloads: no such file or directory``/downloads

為了讓 gcsfuse 在我的 (Alpine) Docker 映像中工作,是否缺少包或參數?

如果你想複製,你可以按照我的 repo 中的 README.md 中的說明創建你自己的本地圖像副本(你需要將你的 json 密鑰上傳到 VM)(amitie10g/docker-transmission也可以在 Docker Hub 上獲得)。

日誌可在此處獲得。

使用的虛擬機映像:

  • 開發:Ubuntu 18.04
  • 目標:Container-Optimized OS 75-12105.40.0 beta

用於建構的 Docker 鏡像:

  • lsiobase/高山:3.9
  • golang:高山

提前致謝。

我通過建構mount.gcsfuse幫助程序並在以下位置填充/etc/fstab文件解決了這個問題/etc/cont-init.d/20.config

echo "$BUCKET /downloads gcsfuse rw,user,noauto,key_file=/config/gcsfuse-key.json" >> /etc/fstab

然後,執行mount.gcsfuse

s6-setuidgid abc mount.gcsfuse $BUCKET /downloads

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