簡體   English   中英

在 Nginx 配置中使用 docker-compose 服務名稱

[英]Use docker-compose service names in Nginx config

我有一個包含 4 項服務的應用程序。 其中之一是 Nginx,它將充當代理。 我使用 docker compose 來運行服務。 在 nginx 中,當我指定路徑和代理位置時,我希望能夠使用服務名稱。 這是我到目前為止所做的。

version: '3'
services:
  go_app:
    image: go_app
    depends_on: 
      - mysql
    ports: 
      - "8000:8000"

  mysql:
    image: mysql_db
    ports: 
      - "3306:3306"

  flask_app:
    image: flask_app
    ports: 
      - "8080:8080"

  nginx:
    image: nginx_app
    ports: 
      - "80:80"
    depends_on: 
      - mysql
      - flask_app
      - go_app

通過以上內容,我創建了所有服務。 他們都在各自的端口上工作。 我希望 Nginx 監聽配置中定義的端口 80 和代理:

server {
listen 0.0.0.0:80;
server_name localhost;

location / {
  proxy_pass http://${FLASK_APP}:8080/;
  }
}

你可能會問 FLASK_APP 是從哪里來的。 我在 nginx docker 圖像中指定它:

FROM nginx

ENV FLASK_APP=flask_app
RUN rm /etc/nginx/conf.d/default.conf
COPY config/default.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Nginx 容器不斷失敗,並出現以下錯誤:

[emerg] 1#1: unknown "flask_app" variable
nginx: [emerg] unknown "flask_app" variable

我理解 docker 撰寫的方式, flask_app應該解析為 flask_app 服務。 我在做什么錯/誤解?

問題是 nginx 不讀取 ENV 變量。

https://github.com/docker-library/docs/tree/master/nginx#using-environment-variables-in-nginx-configuration

一個解決方案:你可以用這個修改你的 dockerfile 為nginx

FROM nginx
ENV FLASK_APP=flask_app
RUN rm /etc/nginx/conf.d/default.conf
COPY default.conf /etc/nginx/conf.d/default.template
EXPOSE 80
CMD ["/bin/bash","-c","envsubst < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"]

COPY命令被修改為將您的配置復制為模板。

最后一行被修改為使用您的 ENV 變量進行替換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM