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

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

ただいまの
回答率

87.49%

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,600

score 63

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

よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

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/03 07:21

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

    キャンセル

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/06/03 06:36

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

    キャンセル

0

docker commit conatiner_id myimage
この後

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る