LoginSignup
jyoten
@jyoten (jyoten to)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

複数のDockerコンテナ間の通信について

解決したいこと

ここに解決したい内容を記載してください。

pythonとnginxのDockerコンテナを作成し、それぞれの通信が通っているかを
テストしたいところなかなかうまくいきません。

確認したところflaskの内容を以下のようにしました

from flask import Flask
from flask import render_template

app = Flask(name)

@app.route('/')
def index():
return render_template('index.html')

if name == 'main':
app.run(host='0.0.0.0', port=8000)

nginxのdefault.confの中身に以下の内容を追加しました。

location / {
    proxy_pass http://python3:8000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_buffering off;
}

ポートの設定も問題なさそうですが一体どこに問題があるでしょうか。
分かる方は教えて頂けたら幸いです。
何卒よろしくお願いいたします。

0

1Answer

Comments

  1. ip addr で実ipを調べて

    if name == 'main':
        app.run(host='10.20.30.40', port=8000)
    
    location / {
        proxy_pass http://10.20.30.40:8000;
    

    でしょうか?

    コンテナ内外で 
    wget -SO- http://10.20.30.40:8000/
    | od -c
    で確認しましょう!

    おそらく、NGでは! networks:を確認しましたか?

    nginx はコンテナ外に、flaskはコンテナ内に配置しましょう?

    docker-compose.yml に次の指定をしては?
    neyworks: host

  2. @jyoten

    Questioner

    ご返事頂きありがとうございます。
    初心者なので自分も色々調べてみました。
    ymlファイルはこんな感じです。
    再度勉強し直したところいくつか問題があるみたいです。
    上記のコメントを踏まえて再度試してみたいと思います。
    もしご指摘があれば教えて頂けたら幸いです。
    よろしくお願いいたします。

    version: '3'
    services:
    python3:
    restart: always
    build: .
    container_name: 'python3'
    tty: true
    expose:
    - 8000
    environment:
    - DATABASE_URL=mysql+pymysql://root:123@db:3306/test-db
    volumes:
    - ./src:/root/src
    - ./templates:/tmp

    nginx:
    image: 'nginx:latest'
    container_name: 'my-nginx'
    ports:
    - "80:80"
    depends_on:
    - python3

    db:
    image: 'mysql:latest'
    ports:
    - '3306:3306'
    container_name: 'my-db'
    environment:
    MYSQL_ROOT_PASSWORD: '123'
    MYSQL_DATABASE: 'test-db'
    volumes:
    - mysql_data:/var/lib/mysql

    volumes:
    html_data:
    mysql_data:

  3. @jyoten

    Questioner

    改めまして、ご回答ありがとうございました。
    いろいろと参考にさせていただきました。ありがとうございます。
    無事nginxを通してpythonアプリを表示させることができました。
    やはりコンテナ間のネットワークの部分に問題がありました。

Your answer might help someone💌