質問: Docker上にあるRails環境をAzureでデプロイしたいと考えており、チュートリアルをやっていますが、以下の部分で躓いているので教えていただきたいです。 カスタム コンテナーを使用してカスタム ソフトウェアを Azure App Service に移行する ### 行ったこと 1. イメージをビルドする ``` docker build --tag appsvc-tutorial-custom-image . ``` 2. Docker コンテナーをローカルで実行して、ビルドの動作をテストします。 ``` docker run -p 8000:8000 appsvc-tutorial-custom-image ``` この2番でlocalhostにアクセスしているのですが、応答がありません。 私がimageを作成したのはDockerのクイックスタートを参考にしたものでこちらとなります。 localhost:3000にアクセスするとYou're on railsとなるだけの環境構築しただけになります。 2番は ``` docker run -p 3000:3000 appsvc-tutorial-custom-image ``` と変更しました。(3000番のポートにdocker-compose.ymlで設定しているため) ``` Switch to inspect mode. ``` と返答があり、localhost:3000にアクセスしても**このサイトはアクセスできません**となります。 どのようにすればイメージから、localhost:3000にアクセスできるようになるのでしょうか。 また、imageを作成するのはDockerfileから作るものだからできないのかもしれないとも考えましたが、どうなのでしょうか。 `docker run`を利用してimageから起動する方法を教えてほしいです。
回答: 現在の Dockerfile では CMD が指定されていません。このため指定無しで `docker run` した場合、FROM で指定されている ruby:2.5.3 の CMD である `irb` が起動しています。 `docker-compose up` で起動した場合は docker-compose.yml で指定したコマンドである `rails s -p 3000 -b '0.0.0.0'` が実行されているため、3000 番ポートで Rails が待ち受けてくれています。一方で今回作った Docker イメージでは単に `docker run` するだけだと `irb` が起動するだけなので Rails が起動していません。 このことを手元で試すには、たとえばコマンド引数で CMD を指定する `docker run -p 3000:3000 appsvc-tutorial-custom-image rails s -p 3000 -b '0.0.0.0'` を実行すると良いです。この場合は `localhost:3000` で Rails へアクセスできます。ただし DB コンテナが起動しておらず DB へのアクセスに失敗するのでエラー画面が表示されるはずです。 単に `docker run -p 3000:3000` しただけで動くようにしたければ、Dockerfile で CMD を指定すると良いでしょう。