質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ethereum

Ethereum(イーサリアム)は、ビットコインに次いで時価総額が大きい仮想通貨もしくはそのブロックチェーン技術を指します。DApps やスマート・コントラクトの構築を目的としたプラットフォームであり、OSSで開発されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

3回答

2181閲覧

docker for macで localhost:7545 に繋げると 400 bad request になる

hokosugi

総合スコア63

Ethereum

Ethereum(イーサリアム)は、ビットコインに次いで時価総額が大きい仮想通貨もしくはそのブロックチェーン技術を指します。DApps やスマート・コントラクトの構築を目的としたプラットフォームであり、OSSで開発されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2019/06/02 11:43

編集2019/06/02 21:00

Dappsを作りたくてtruffleをdocker for macのコンテナにインストールして諸々設定を終えcompile,migrate出来ました。UIもcreate-react-appをimportして簡単なページを作成しています。
npm install
npm start
と打ち込んで
下記のように警告はあるもののプログラムは実行されているようです。但し、初めてなので本当に実行されているかは不明。

Compiled with warnings. Warning in ./src/App.js /exchange/exchange-app/src/App.js 2:8 warning 'logo' is defined but never used no-unused-vars ✖ 1 problem (0 errors, 1 warning) You may use special comments to disable some warnings. Use // eslint-disable-next-line to ignore the next line. Use /* eslint-disable */ to ignore all warnings in a file.

ここで本来ならlocalhost:7545にブラウザからアクセスすると設定したhello world!が表示されるはずなんですが 400 bad requestと返ってきます。

###やってみたこと
ローカルホストにdocker.host.iternalで繋いでいるので http://docker.host.iternal:7545 としてみた => 「docker.host.iternal のサーバーの IP アドレスが見つかりませんでした。」(見当違い)

このサイトを参考にホストOSのipアドレスをlocalhostの代わりに打ち込んでみる。例:http://192.168.11.1:7545 => 192.168.11.1で接続が拒否されました。

docker psで表示されるコンテナのportsが非表示なのが気になるので調べているがよく分かっていない。truffle-config.jsの中に

development: { host: "host.docker.internal", // Localhost (default: none) port: 7545, // Standard Ethereum port (default: none) network_id: "*", // Any network (default: none)

とあるのでganache用のportsが表示されるはずなのにと考えあぐねているところです。image元のdocker-compose.ymlにportsの記載があるのでここを修正すればいいのかなとdocker-compose configdocker-compose logsを打ち込んでみましたが

Can't find a suitable configuration file in this directory or any parent. Are you in the right directory?

とエラーです。そもそもdocker-compose.ymlを弄るのが正しいのか分からない上にホームディレクトリからでしかdockerを建てていなくてここで止まってしまいました。
https://gyazo.com/45c269c3211c7f2ee738d1a78f5d935c

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

bad request

localhost:7545にブラウザからアクセスすると設定したhello world!が表示されるはずなんですが 400 bad requestと返ってきます

これに関しては、ご自身もおっしゃっているように、

portsとして表示されるはずなのにと考えあぐねているところです

portsが表示されていないことが原因かと思います。

コンテナを起動するときに、
docker run -it <image name>あるいは、 docker exec -it <container id>を実行していると思うのですがその時に、 -pでポートを指定しないと、ホストOS(macOS)からコンテナにアクセスすることはできないです。

なので、
portを指定して起動してみてください。
(今回だと、 -p 7545:7545になるかと)

コンテナに外部からアクセス(ポートフォワード)

docker-composeのエラー

Can't find a suitable configuration file in this directory or any parent. Are you in the right directory?

こちらのエラーに関しては、おそらく、
docker-compsoeコマンドを実行しようとしているディレクトリに docker-compose.ymlが無いために発生していると思います。
なので、もし docker-composeコマンドを使用する場合は、カレントディレクトリ(docker-composeを実行しようとしているディレクトリ)に、 docker-compose.ymlが存在しているか確認してみてください。

投稿2019/06/02 13:24

編集2019/06/02 13:25
tail12

総合スコア607

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hokosugi

2019/06/02 22:21

ご丁寧な回答ありがとうございます。やはりコンテナ側にポート番号がないことが原因なのかと再確認しているところです。run,execコマンドのオプションは煩雑で読み飛ばしていました(そもそもexecコマンドではなくattachコマンドを使用していた)。 docker run --name test -d -p 7545:7545 ubuntu でコンテナ作成しましたが、portsには無記載でした。image(ubuntu)に問題があるのかなとdocker-compose.ymlを探していますが中々厄介です。もう少し学習してなんとかクリアしようと思います。兎にも角にもご回答ありがとうございます。大変参考になりました。また助けて頂けると嬉しいです。
guest

0

docker commit conatiner_id myimage
この後

docker run --name new_container -itd -p 3000:3000 myimage:tag_name
でポート付きのコンテナが出来ました。

投稿2019/06/04 07:56

hokosugi

総合スコア63

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

400 bad request ということは、何らかのHTTPサーバに接続はできていて、接続の許可がないとみなされたということのように思います。

よくあるパターンとしては、HTTPサーバがローカルからの接続しか受け付けないような設定になっていて、起動した環境の中からlocalhost:7545で試すと成功する。

しかし、Dockerを使った場合は外部からの接続扱いになるため、ホスト側のlocalhost:7545から接続すると失敗する。。というパターンです。

投稿2019/06/02 20:01

otolab

総合スコア765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hokosugi

2019/06/02 21:36

400 bad request が接続拒否ではない事は他のポート番号を試して分かりました。あとは仰るように接続許可をどうするかなんだと思います。今の所dockerコンテナのポート番号とホスト側のポート番号が同じでいいのかどうかを調べています。ホスト側がよくある「localhost:3000」とか「80」でなくて良いかで悩んでおります。中々難しくて大変ですが、お回答大変参考になりました、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問