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

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

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

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

Docker

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

受付中

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

fukku
fukku

総合スコア16

nginx

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

Docker

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

1回答

-1評価

0クリップ

3845閲覧

投稿2018/12/20 02:54

編集2022/01/12 10:55

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 をコンテナ間で共有することはできるのでしょうか。

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

環境

softwareversion
Ubuntu18.04
Docker18.09.0
docker-compose1.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ページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

nginx

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

Docker

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