きり丸の技術日記

技術検証したり、資格等をここに残していきます。

DockerのMinioをアップデートしたら起動しなくなった

DockerのMinioを使用していますが、イメージが古すぎてディレクトリごとアップロードができませんでした。そのため、最新イメージにアップデートしようとしたところ、エラーメッセージが出て起動しなかったその対応を記載します。

※ プロダクション環境でMinioを使用している場合には適用できません。

環境

  • Docker
  • Minio
    • RELEASE.2019-01-31T00-31-19Z
    • RELEASE.2024-02-13T15-35-11Z

ゴール

次のエラーメッセージが出たときに、最新イメージで起動できるようにする。

ERROR Unable to use the drive /data: Drive /data: found backend type fs, expected xl or xl-single - to migrate to a supported backend visit https://min.io/docs/minio/linux/operations/install-deploy-manage/migrate-fs-gateway.html: Invalid arguments specified

対応

Dockerで保持しているminioのvolumeを削除してください。

# ボリューム名を調べる
docker volume ls
# 調べたボリューム名を削除する
# {ディレクトリ名}_{volume名} になっているはず
docker volume rm fastapi-practice_minio_data

該当イメージを使用中の場合は削除できないので、事前に停止してください。

docker compose down
docker volume ls
docker volume rm fastapi-practice_minio_data
docker compose up -d

原因

正確なBreaking Changeのバージョンは追ってません。2022年くらいのminioの改修でファイルシステムがfsからxlに変わったので、古いMinioのvolumeを破棄する必要があります。

ソースコード

なし。

終わりに

Dockerのvolume操作に関しては、docker composeではなく、dockerを使用するというのがポイントです。

WSLで起動したサーバにiPhone等のモバイル端末からアクセスする

※ 家で検証したときはできなかったのですが、会社で検証したときはできましたので、残しておきます。

WSLで起動したサーバに対してiPhoneやAndroidからアクセスすることでモバイル端末の実機確認をしたかったのですが、単純にWSLのIPにアクセスするだけでは確認できなかったので手順を残します。

環境

  • WSL
    • Ubuntu 22.04.4 LTS

ゴール

iPhoneでWSL上に起動しているサーバにアクセスする。

詳細

管理者権限でコマンドプロンプトを起動します

管理者権限でコマンドプロンプトを起動します。私の過去記事に簡単に管理者権限でアプリケーションを起動する方法を残しているので、参考にしてください。

ホストマシン(Windows)でホストマシンとWSLのIPを調べます

コマンドプロンプトにてホストマシン(Windows)とWSLのIPを調べる。

ipconfig | findstr "IPv4 Address"
# ホストマシン と WSL の IPを調べる
# 例)ホストマシンのIP
# 192.168.10.106
# WSLのIP
# 172.25.208.1

ホストマシンからWSLへのポートフォワードを設定する

直接モバイル端末からWSLのサーバにアクセスできないので、ホストマシンにアクセスしたらWSLに転送する設定します。次の設定だとホストマシンの4200番ポートにアクセスしたら、WSLのサーバに4200番ポートでアクセスします。

ちなみに、4200番ポートはAngularのデフォルトのポートです。

netsh interface portproxy add v4tov4 listenport=4200 listenaddress=0.0.0.0 connectport=4200 connectaddress=172.25.208.1

iPhoneからWSLのサーバにアクセスする

モバイル端末からはホストマシンのIPにアクセスします。

http://192.168.10.106:4200

備考

ポートフォーワード設定を確認したかったり、削除したりしたい場合は次のコマンドを実行してください。

# 現在のポートフォワード設定を確認する
netsh interface portproxy show all

# 設定を削除する
netsh interface portproxy delete v4tov4 listenport=4200 listenaddress=0.0.0.0

自宅で動かなかった理由としては、Wifiのネットワーク分離機能が有効だったので、別端末からアクセスできないようになっていたからだと思われます。

基本は問題ないと思いますが、設定変更したことによって家の機器が接続できなくなったら困るので実施しませんでした。変にセキュリティを緩くする必要もありませんし。

終わりに

WSLはまだまだ難しいですね。ChatGPTも簡単に情報を提供してくれないので、困ったら頑張って解決する必要がありますね。

今後もWSLでハマったらブログに残していきたいです。

類似情報

Gmailでテキストメールを受信して確認する(クライアント問わない方法)

Gmailでテキストメールを送信する方法はたくさん見つかったのですが、受信してテキストメールを確認する方法は見つからなかったのでブログにします。

なお、GmailではHTMLメールとテキストメールを選んで受信はできません。そのため、受信するではなく、受信してテキストメールを確認するが本題です。

環境

  • Gmail
    • 20240320時点

確認方法

テキストメールを確認したいメールのソースを確認する

確認したいメールを開き、「︙」をクリックしてメッセージのソースを確認を選択します。

デコードしてテキストメールを確認する

メッセージのソースからテキストメールの箇所を探します。text/plainのブロックを探してください。画像では6LO86Kqから始まり、ZS5qcC8Kで終わるブロックです。

今回の場合、Content-Transfer-Encoding: base64というメールヘッダがbase64でencodeされていることを示しているので、こちらをbase64でdecodeするとテキストメールの内容を確認できます。

なお、base64でのencode, decodeが必要ない言語ではそのまま確認できます。

そもそもテキストメールとHTMLメールを両立できるのか

マルチパートメールという仕組みによって、テキストメールとHTMLメールを両立できます。ファイル添付ができるのもこちらの仕組みです。

詳細はSendgrid様のページで解説してくれています。

終わりに

メールについて詳しい仕様を知らなかったので、この方法で確認できるのを最近知りました。GmailがHTMLメールしか受信できないから、受信時にテキストメールを切り捨てているのかと思っていました。

基本的にはHTMLメールの検証だけでよいのですが、ごくまれにテキストメールの検証も必要だったのでこれで検証できると分かってよかったです。

参考情報