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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
0
nginx コンテナから /tmp/uwsgi.sock を参照するために、 uwsgi コンテナのファイルを共有する必要があると考えていますが、この観点は正しいでしょうか。
また、単一のシステム内で使用するための unix sokets をコンテナ間で共有することはできるのでしょうか。
共有するというのはオーバーヘッドの観点からも推奨されると思います。
https://qiita.com/ma2shita/items/6f1905847b2059f7cf7d
共有する際のパーミッションは面倒ですが。
#そもそもとして、uwsgiとnginxを別コンテナにする必要が本当にあるのか十分ご検討されるとよろしいかと
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.19%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる