Dockerで起動したサーバにcurlでアクセスしても「接続が相手からリセットされました」とエラーメッセージが出るだけの時の解決策
エラー
curl: (56) Recv failure: 接続が相手からリセットされました
解決法
docker run --network=host
で解決します.
見てて気が付きました.
1日潰しました.
The host networking driver only works on Linux hosts, and is not supported on Docker Desktop for Mac, Docker Desktop for Windows, or Docker EE for Windows Server.
でLinux以外はhostをサポートしてないからLinux以外では使えません.
あとポートマッピングも出来ません.
何故かは知りません.
Dockerへの愚痴
Dockerはセキュリティ上の理由で環境分けたい場合とか, 古いコンパイラを使いたい場合は必要性はよくわかりますが, これで日常的な開発しようとする人がわからない.
メモリは食うし差分ビルドは効かなくなるしトラブルが次から次に降ってくるし, ネイティブでやらない理由がわからない.
エラーになるにしてもまともなエラーメッセージ出してくれるなら良いんですけど, そういう訳でもない.
ENTRYPOINT
でサーバ起動してホストでdocker run -it
で起動してるのにC-cで終了しないのは何故なんですかね.
色々調べましたが全くわからず,
結局自分がDocker使わなければ良いという結論に戻ってきました.
自分が使わない環境向けのビルドでトラブルに見舞われるのこういうモチベーションになるから本当に良くない.
3年前も別プロジェクトでDockerが流行ってると聞いた上司から「Docker化しないの?」って言われて, 「Dockerを使わない理由」をesaに延々書いて説得したことを思い出しました.
いやDockerには罪はないし, 特にCircle CIとかで日常的に使ってますし, セキュリティ上の理由でビルドに使ったり, 古いコンパイラ使ったり, 今一瞬だけ使いたいソフトウェア使う時に使ってますよ.
乱用が害としか思えません.
追記
--network=bridge
を使ってもアプリケションサーバをlocalhost
でlistenさせるのではなく0.0.0.0
でlistenさせることで解決します.