【Docker】Arukas アプリ作成時にハマったこと(EXPOSE 宣言は必須編)
はじめに
さくらインターネットの Docker ホスティングサービスである Arukas でアプリを作成しているときにハマったのでメモ。
顛末
まず、Arukas で アプリ(= Docker コンテナ)を起動するためには、Docker Hub に登録されているイメージを利用する必要がある。
今回使おうとしたのは Ubuntu18.04 の公式イメージ。
Arukas のアプリ追加コンソールを開いて、イメージとして Docker Hub で公式提供されているubuntu:18.04
を指定してアプリ作成。
アプリのステータスが「アプリはデプロイ中です」となったまましばらく待つ1と...「アプリの起動に失敗しました」となり起動できない。
イメージ名を_/ubuntu:18.04
と指定して再試行したが同様に起動に失敗する。
調べてみると Arukas のFAQに以下のような記載があった。
対象ポートはDockerfile内においてEXPOSE宣言で開放されておりますでしょうか。 EXPOSEで開放されているポートが入力されていない場合、サーバとして起動しないことがございます。
とのこと。
これ、特にポート開放を必要とするサービスは入れない場合に、適当なポートをEXPOSE
宣言しておくだけで良いのだろうか?例えば SSH デーモンを動かさずとも取り敢えずEXPOSE 22
を設定しておくだけで正常起動の要件は満たされるのだろうか?
検証してみる。
以下のような、素の Ubuntu にポート22を開放するだけの Dockerfile を用意。
FROM ubuntu:18.04
EXPOSE 22
CMD echo 'Hello docker world!'
上記 Dockerfile からイメージをビルドして、自身の管理する Docker Hub に登録。(実際の試行ではxxxxxxを実在の Docker Hub アカウント名としています)
docker build . -t xxxxxx/ubuntu:18.04
docker push xxxxxx/ubuntu:18.04
Arukas のアプリ作成画面に戻り、先程登録したイメージxxxxxx/ubuntu:18.04
を指定し、アプリを作成し、起動。(この時、Arukas 側のポート設定は不要です。)
結論
Arukas のアプリで利用するイメージは何らかの一つ以上のポートがEXPOSE
宣言されている必要がある。
しかし、コンテナ内でそのポートを利用するサービスを動かしたり、 Arukas 側のポート設定で同じ番号のポートを開放する必要はない。
おまけ
因みに、SSH デーモンがちゃんと設定されたイメージを使用し、以下のように Arukas 側でもポート22を設定してあげれば、
作成後のアプリのポート22に対して動的なハイポート(~arukascloud.io:31XXX
の31XXX
部分)が自動的にマッピングされるので、例えば以下のようなマッピングが行われた場合はssh [email protected] -p 31XXX
とすればアプリに SSH 接続できます。(アプリを再起動するたびに URI やハイポートの値は動的に変わるので注意。)
-
https://support.arukas.io/hc/ja/articles/210357188 によると、アプリケーションの設定内容に誤りがある場合は起動試行中のアプリケーションは15分以内に強制停止されるとのこと。 ↩
Author And Source
この問題について(【Docker】Arukas アプリ作成時にハマったこと(EXPOSE 宣言は必須編)), 我々は、より多くの情報をここで見つけました https://qiita.com/r-wakatsuki/items/ea313c47c265e1a8f439著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .