Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

標籤: Docker

wait-for-it 檢查、等待服務啟動

Posted on 2023 年 3 月 8 日2023 年 3 月 8 日 By 日落 在〈wait-for-it 檢查、等待服務啟動〉中尚無留言

wait-for-it 是個 shell script 撰寫的工具,會等待並檢查目標是否可以進行 TCP 連線。

例如等待 mysql 啟動:

$ wait-for-it 127.0.0.1:3306
wait-for-it: waiting 15 seconds for 127.0.0.1:3306

可以在 docker 中檢查其他 container / service 是否啟動,可以的話才繼續執行:

# wait for MySQL to initialize
wait-for-it db:3306

# run DB migration
php artisan migrate
Tags:Docker, Linux

docker container 錯誤:entrypoint permission denied

Posted on 2022 年 9 月 24 日 By 日落 在〈docker container 錯誤:entrypoint permission denied〉中有 1 則留言

追 minikube 中的 log kubectl logs s3-provider-xxxx -p 時,看到錯誤訊息:

Defaulted container "s3fuse" out of: s3fuse, init-myservice (init)
/bin/sh: /docker-entrypoint.sh: Permission denied

第一,是檢查 docker-entrypoint.sh 的權限。要讓 script 可以執行,在 COPY 進 image 以後記得調整權限:

RUN ["chmod", "+x", "/docker-entrypoint.sh"]

另外,再看了一下 entrypoint 寫什麼:

#!/bin/bash
set -euo pipefail
set -o errexit
set -o errtrace
....

第一行這樣寫有點雷。

shebang 雖然可以讓 shell 可以了解需要使用哪一個直譯器來執行 script (可以參考之前 shebang 的介紹),但是每個系統的 bash 路徑並不一定相同。有些在 /bin/bash ,有些則在 /usr/bin/bash,當然還有其他例外。

若不確定直譯器的路徑時,可以透過 env 這個指令來協助,這個工具在個系統上的絕對路徑都是 /usr/bin/env,env 會從 runtime environment 偵測執行檔的路徑 (上面的範例是 bash),這樣一來 script 作者就不需要為每個環境來客製化設定。

用 env 來改寫 shebang,結果如下:

#!/usr/bin/env bash
set -euo pipefail
set -o errexit
set -o errtrace
....
Tags:Docker, Linux

chown 在 docker image size 上的影響

Posted on 2022 年 8 月 15 日2022 年 8 月 16 日 By 日落 在〈chown 在 docker image size 上的影響〉中有 2 則留言

docker build 會將每個動作建立一個 image layer,好處就是相同的動作所建立 image layer 都可以重複使用,僅有新的動作會增加新的 image layer。

不過 chown 會讓 docker 將檔案判定為新的檔案,而另外新增一個 layer,導致 image size 增加。

以下是一個小實驗,其中 test.img 為 512MB 的檔案:

FROM ubuntu:20.04

# test:512-file
COPY test.img /var/

# test:512-chown
RUN chown www-data:www-data /var/test.img

然後針對第二、第三個指令分別 build -t 以後,透過 docker images 列出 images 和他的大小:

test       512-chown       02367f2a3158   4 seconds ago        1.15GB
test       512-file        965cb380f042   41 seconds ago       610MB

經過 chown 的 test.img 被 docker 判斷為新的檔案,因此多了一個 image layer 來儲存異動,image 就整整多了 512MB,這對建立 docker image 來說儲存、傳輸成本會大很多。

目前看到比較好的解法,是使用 COPY --chown 直接指定檔案的 owner,這樣異動就會放在同一個 image layer。

Tags:Docker

dockerized mail server

Posted on 2021 年 4 月 18 日2021 年 4 月 17 日 By 日落 在〈dockerized mail server〉中尚無留言

之前看到 gslin 的文章「自建 Mail System 的難度」,最近跑去還債 (K 基礎教學) 才知道牽涉到的東西有那麼多 ….

由於容易的開發、部屬越發成熟,也開始有不少人開始把常用的工具和服務直接包成 image,讓自架 mail server 的門檻下降了不少。目前看到幾個感覺還不賴的 images,大家有興趣可以參考一下:

  • Mail-in-a-box
  • Mailu
  • docker-mailserver
Tags:Docker, mail

Docker on Windows 10 鳥鳥的

Posted on 2021 年 1 月 28 日2021 年 3 月 12 日 By 日落 在〈Docker on Windows 10 鳥鳥的〉中尚無留言

Docker client 的是窗是長這樣:

如果要進 images 就更麻煩了,沒有好的 shell 可以用:

好險只打算用一次做 dirty work ….

Tags:Docker, Windows

文章分頁

上一頁 1 2 3 下一頁

其他

關於我  (About me)

小額贊助

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.