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

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

新規登録して質問してみよう
ただいま回答率
85.48%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Docker

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

Q&A

解決済

2回答

11356閲覧

curl: (7) Failed to connect to 127.0.0.1 port 80: Connection refusedというエラーについて

sequelanonymous

総合スコア123

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Docker

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

1グッド

2クリップ

投稿2018/11/07 00:45

編集2018/11/08 00:37

ホストからdockerコンテナ内のnginxにcurl http://127.0.0.1:80/でアクセスして動いているかどうか確認したいです。docker psではコンテナ自体の起動されているのは確認済みです。また、healthcheckは設定しており、うまく接続できます。(docker-compose up -d でbuild&起動しています。)

http://127.0.0.1:80/ 
→ curl: (7) Failed to connect to 127.0.0.1 port 80: Connection refused

http://127.0.0.1:80/healthcheck 
→ curl: (7) Failed to connect to 127.0.0.1 port 80: Connection refused

http://127.0.0.1:9080/
→ Internal Server Error

http://127.0.0.1:9080/healthcheck
→ 成功

上記の結果と下記のdockerの下記の状況をみるに、ポートフォワーディングできてはいるがアクセスがうまくいっていないようにみえます。どなたかご教示の方いましたら教えて頂けませんでしょうか?

bash-3.2$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 647906531af5 xxx_nginx "nginx -g 'daemon of…" 4 minutes ago Up 4 minutes 0.0.0.0:9080->80/tcp xxx_nginx_1 2b96b3070618 xxx_uwsgi "uwsgi --emperor /co…" 4 minutes ago Up 4 minutes 0.0.0.0:3031->3031/tcp, 8080/tcp xxx_uwsgi_1 0b6b815e327b mysql "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 33060/tcp, 0.0.0.0:13306->3306/tcp xxx_mysql_1
bash-3.2$ curl -v 127.0.0.1 * Rebuilt URL to: 127.0.0.1/ * Trying 127.0.0.1... * TCP_NODELAY set * Connection failed * connect to 127.0.0.1 port 80 failed: Connection refused * Failed to connect to 127.0.0.1 port 80: Connection refused * Closing connection 0 curl: (7) Failed to connect to 127.0.0.1 port 80: Connection refused bash-3.2$ cat /etc/hosts ## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost dev-auth.xxx.jp dev-api.xxx.jp setting.hoge.xxx.jp 255.255.255.255 broadcasthost ::1 localhost #127.0.0.1 setting.hoge.xxx.jp

追記

docker-compose.yamlファイルは以下のようになっています。
ホスト側のOSは、macでdocker側のOSは、ubuntuになります。

version: "3" services: uwsgi: build: ./ volumes: - ~/local/xxx/work:/code/log/ ports: - "3031:3031" links: - mysql:mysql environment: TZ: "Asia/Tokyo" DATABASE_URL: "mysql+mysqldb://root:password@mysql/test_db?charset=utf8" DEBUG: 1 CONFIG: local nginx: build: ./nginx/local/ volumes: - ./nginx/local/nginx.conf:/etc/nginx/nginx.conf links: - uwsgi ports: - "9080:80" environment: TZ: "Asia/Tokyo" mysql: image: mysql volumes: - ~/local/xxx/work:/code/log/ ports: - "13306:3306" environment: MYSQL_ROOT_PASSWORD: password MYSQL_USER: test MYSQL_PASSWORD: test MYSQL_DATABASE: test_db
Toritaus👍を押しています

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

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

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

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

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

guest

回答2

0

情報としてOSや、docker-compose.yml を提示していただけるといいと思います。

とりいそぎ、docker ps を拝見する限りでは、

0.0.0.0:9080->80/tcp

とあるので、Dockerのコンテナの80番を、Dockerホストの9080番に割り当てているという状況ですね。
(ここ間違いやすいのですが、ホストのポート:コンテナのポート という書き方になります)

Dockerコンテナ内でのnginxが80番で起動しているなら、以下のように書くといいかと思います。

ports: - “9080:80” - “80:80"

9080:80 はすでに設定にあるかと思うので、80:80 が追加になります。
こうすると、ホスト側から curl http://127.0.0.1:80 でも curl http://127.0.0.1:9080 でもどちらでもアクセスできると思います。

ただし、DockerホストのOSがわからないので、ホストの80番を利用する場合はroot権限が必要かもしれません。

※teratailのMarkdownだと、ダブルクォートがおかしくなっちゃうのでご注意ください。

投稿2018/11/07 12:33

suama

総合スコア1997

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

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

sequelanonymous

2018/11/08 00:39

コメントありがとうございます。 > Dockerのコンテナの80番を、Dockerホストの9080番に割り当てているという状況ですね。 細かい点のご確認ですが、Dockerホストの9080番をDockerのコンテナの80番に割り当てている(ポートフォワーディングしている)という認識でしたが、違いますでしょうか? また、不足していた情報を追記しました。何か他にお気づきな点ありましたら、ご教示頂けますと助かります。
suama

2018/11/08 02:25

こんにちは。 わかりにくいご説明で失礼しました! - Dockerコンテナのnginxは80番でhttpのサービスを稼働 - Dockerホスト経由で、Dockerホストの9080番にアクセスすると、Dockerコンテナの80番にフォワードされる 実際にサービスを受けるのはDockerコンテナなので、 User ---> ホストの9080 (Userさんのリクエストを肩代わりしてコンテナに渡す) ---> コンテナの80 --> niginxが受け答え というイメージですね。おっしゃる通りです。
sequelanonymous

2018/11/08 09:05

わかりました、ありがとうございます!
suama

2018/11/08 10:08

よかったです。 さて、その上でDockerホストの80番でコンテナの80番にアクセスしたいということなので、上記の回答の通りで、 9080:80 と書かれているところを 80:80 にしてあげるといいです。
guest

0

自己解決

dockerコンテナでexposeしているポート番号とコンテナ内で立ち上がるサーバーのポート番号を同じにする必要がある。

投稿2018/11/25 06:28

sequelanonymous

総合スコア123

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問