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

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

ただいまの
回答率

90.32%

dockerコンテナ間でunix socketsを使用した通信の実現

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 799

fukku

score 9

dockerで以下のコンテナを実行しています。

  • nginx
  • uwsgi + flask

nginx から uwsgi への通信が TCP sockets を使うと実現できました。
これを unix sockets で実現することができないかと考え、nginx.conf と uwsgi.ini を以下のように変更してみましたが接続できませんでした。

nginx.conf

    upstream uwsgi {
#        server uwsgi:3031;
         server unix:///tmp/uwsgi.sock;
    }

uwsgi.ini

[uwsgi]
wsgi-file = main.py
callable = app
master = true
processes = 1
# socket = :3031
socket = /tmp/uwsgi.sock
chmod-socket = 666
vacuum = true
die-on-term = true
py-autoreload = 1

nginx コンテナ内で uwsgi コンテナで作成する /tmp/uwsgi.sock が参照できるか確認してみたところ見えませんでした。
nginx コンテナから /tmp/uwsgi.sock を参照するために、 uwsgi コンテナのファイルを共有する必要があると考えていますが、この観点は正しいでしょうか。
また、単一のシステム内で使用するための unix sokets をコンテナ間で共有することはできるのでしょうか。

環境情報を以下に記載します。

環境

 software   version 
 Ubuntu    18.04 
 Docker   18.09.0 
 docker-compose   1.23.2 

ディレクトリ構成

┣ myServer
    ┣ app
        ┣ Dockerfile
        ┣ main.py
        ┣ requirements.txt
        ┣ uwsgi.ini
    ┣ docker-compose.yaml
    ┣ nginx
        ┣ Dockerfile
        ┣ nginx.conf

myServer

docker-compose.yaml

version: "3"
services:

  uwsgi:
    build: ./app
    volumes:
      - ./app:/var/www/
    ports:
      - "3031:3031"
    environment:
      TZ: "Asia/Tokyo"

  nginx:
    build: ./nginx
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    links:
      - uwsgi
    ports:
      - "4231:80"
    environment:
      TZ: "Asia/Tokyo"

app

Dockerfile

FROM python:3.6

RUN mkdir /var/www
WORKDIR /var/www

COPY requirements.txt ./

RUN pip install --no-cache-dir -r requirements.txt

CMD ["uwsgi","--ini","/var/www/uwsgi.ini"]

main.py

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

requirements.txt

Flask
uwsgi

uwsgi.ini

[uwsgi]
wsgi-file = main.py
callable = app
master = true
processes = 1
socket = :3031
chmod-socket = 666
vacuum = true
die-on-term = true
py-autoreload = 1

nginx

Dockerfile

FROM nginx
CMD ["nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]

nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    upstream uwsgi {
        server uwsgi:3031;
    }

    server {
        listen 80;
        charset utf-8;

        location / {
            include uwsgi_params;
            uwsgi_pass uwsgi;
        }

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

0

nginx コンテナから /tmp/uwsgi.sock を参照するために、 uwsgi コンテナのファイルを共有する必要があると考えていますが、この観点は正しいでしょうか。
また、単一のシステム内で使用するための unix sokets をコンテナ間で共有することはできるのでしょうか。

共有するというのはオーバーヘッドの観点からも推奨されると思います。
https://qiita.com/ma2shita/items/6f1905847b2059f7cf7d

共有する際のパーミッションは面倒ですが。

#そもそもとして、uwsgiとnginxを別コンテナにする必要が本当にあるのか十分ご検討されるとよろしいかと

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

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