Docker上のGanacheにMetaMaskからアクセスする
結論:Ganache起動時にホスト0.0.0.0を指定する。
ganache -h "0.0.0.0"
Truffle SuiteのPetShopチュートリアルをやっていました。
チュートリアルはローカル環境が前提(だと思う)ですが、散らかるのが嫌なので、ローカル環境(Mac)のDockerにlinuxを用意して、そこにTruffle,Ganacheをインストールしました。nginxも。
Macのブラウザ(FIreFox)で画面が表示できるようになり、でもGanacheに繋ぐところでCORSエラーに。
App.web3Provider = new Web3.providers.HttpProvider('http://127.0.0.1:8545');
(これ、ひとまずこう書いたのですが、チュートリアルではMetaMaskを使用することになっています)。
その後、チュートリアル通りMetaMaskを使うことにして、MetaMaskのネットワーク設定で試しても同じ結果に。
クロスオリジン要求をブロックしました
クロスドメインに惑わされてしばしハマったのち、冒頭の結論に辿り着きました。
Ganacheのホストはデフォルトで127.0.0.1。
webサーバは"localhost"でDockerコンテナ内のサーバに繋げるから、そういうものと思ってしまっていた。
netstatで見たら、nginxもちゃんと0.0.0.0をlistenしていました。
参考にさせていただきました。
https://zenn.dev/shake_sanma/articles/1c6475ba73da48