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