外部ホストからcrAPIへアクセスさせる方法
経緯
某著を読んでcrAPIをセッティングしていました。
外部ホストからアクセスしてもうまくいきませんでした。
docker初心者なので、アクセスさせる方法がわかりませんでした。
切り分けのメモと対応結果を記載しています。
信頼しないホストからcrAPIホストへのアクセスは行わせないようにしましょう。
前提
- crAPIを起動させたホストのIPアドレスがわかること
- crAPIのリッスンポートを変更していないこと
なお、crAPIを起動させるホストをcrAPIホストと記載します。
crAPIへアクセスしたい外部ホストを外部ホストと記載します。
OSのファイアウォールで遮断されていないことの切り分け
OS側で止められているのか、docker側で止められているのかを切り分けます。
pingで疎通確認が取れること
pingをcrAPIホストのIPアドレスへ実行します。
応答があるのか確認します。応答がなければ適宜対処してください。
アクセスさせるための8888番ポートへ外部ホストから接続できること
OSのファイアウォールで8888番ポートへの接続が遮断されている可能性があります。
ncコマンドを用いて8888番ポートへのアクセスができることを確認します。なお、crAPIをstopさせたうえで実行しましょう。
ss -atnコマンドなどでポートがバインドされていないことを確認したうえで、ncコマンドを実行しましょう。
以下のコマンドをcrAPIホストで実行します。
nc -lp 8888
外部ホストからcrAPIホストの8888番ポートへ通信を行います。
ブラウザのURL欄にhttp://[crAPIホストIPアドレス]:8888と入力し、リクエストを送るとよいでしょう。
HTTPリクエストのメッセージが、crAPIホスト側で受信されていればOSのファイアウォールでは遮断されていないことがわかります。
HTTPリクエストのメッセージが表示されていないのであれば、OSのファイアウォールで遮断されている可能性があります。
SELinux/firewalld/iptablesなどの設定をしてみてください。
Docker側でのIPアドレス許可設定
portsオプションの設定を変更する。
https://docs.docker.com/compose/compose-file/compose-file-v3/#ports
crAPIをダウンロードしたディレクトリへ移動する。
(ダウンロードしたディレクトリによって変動します。)
cd ~/crAPI/deploy/docker
上記ディレクトリ内のdocker-compose.ymlファイルを編集します。事前にオリジナルファイルのコピーを生成しておきましょう。
//140行目
//編集前
- "${LISTEN_IP:-127.0.0.1}:8888:80"
//編集後
- "8888:80"
再度、crAPIを起動するとアクセスできるようになっているはずです。