Docker compose 和 nginx 网络主机名

标签 docker nginx docker-compose docker-network

我有以下配置:

  • nginx 由充当反向代理的 docker compose 文件启动//ssl 端点
  • 由不同的 docker compose(出于模块化原因)文件启动的应用程序服务,为应用程序提供服务
  • reverse_proxyapp_service 通过 app_network 连接

由于它们是通过 app_network 连接的,因此我能够在 nginx 配置中寻址 app_service,例如 http://app_service:8080 >,这很好,因为我不需要公开应用服务本身的端口。

不幸的是,在我启动应用服务容器之前,nginx 不会启动,因为它在启动时会检查主机名 app_service 是否存在。

如何防止 nginx 在启动时检查主机名,在 app_service 尚未运行时尝试连接时可能会导致 Bad Gateway 错误?

引用配置文件:

# reverse proxy docker-compose.yml
version: '3'
services:
  reverse_proxy:
    restart: always
    container_name: reverse_proxy
    image: nginx
    ports:
      - 80:80
      - 443:443
    volumes:
      - /srv/docker/nginx/config:/etc/nginx
      - /srv/ssl:/srv/ssl

    networks:
  default:
    external:
      name: app_network
# application service docker-compose.yml
version: '3'

services:
  app_service:
    restart: always
    container_name: app_service
    image: <my_app_image>

networks:
  default:
    external:
      name: app_network
# nginx config
server {

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name app.example.com;

    location / {
        proxy_pass http://app_service:8080;
        include proxy.conf;
    }
    ssl_certificate /srv/ssl/<mycert>.crt;
    ssl_certificate_key /srv/ssl/<mykey>.key;
}

最佳答案

这是一种对我有用的方法:



    # nginx config
    server {

        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        server_name app.example.com;

        location / {
            set $upstream app_service:8080;

            proxy_pass $upstream;
            include proxy.conf;
        }
        ssl_certificate /srv/ssl/.crt;
        ssl_certificate_key /srv/ssl/.key;
    }

如果主机不可用并且在启动时不检查可用性,这会导致出现 502 Bad Gateway 消息。

关于Docker compose 和 nginx 网络主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61085846/

相关文章:

mysql - 如何从 wordpress docker 建立数据库连接

postgresql - 通过 Jira 容器连接到 Postgres 容器

python-2.7 - 使用 Python 2 和 3 安装附加包 Jupyter

docker - docker for Windows 是否可以实现 GPU 直通?

.htaccess - Nginx url重写在两个文件夹中

当域名中没有www时,Nginx加载没有gunicorn

nginx - 在没有 "' http' 指令的 Nginx 上启用 gzip 此处不允许”错误

c# - 如何在 ASP.NET Core 应用程序中的 Docker 上正确安装证书?

php - 在 Laradock 应用程序中找不到类 'MongoId'

docker - 如何使用 docker-compose 在 laradock 中使用 zsh 而不是 bash