Azure容器实例中的容器间通信

时间:2020-03-11 03:13:57

标签: docker nginx azure-container-instances

我正在尝试在azure容器实例中创建一个容器实例组。我有两个docker映像:一个在暴露的端口8000上侦听的guincorn Web应用程序服务器,以及一个nginx代理服务器。我可以部署到Azure容器实例,但是在我的代理容器中收到以下错误。

> nginx: [emerg] host not found in upstream "web:8000" in /etc/nginx/conf.d/nginx.conf:7

似乎我没有正确配置容器网络。有人可以提示我如何在天蓝色的容器实例上配置容器间网络吗?我在本地计算机上构建映像,然后将其推送到docker hub,然后在ACI YAML file

中构建容器组

我可以使用以下配置文件在本地计算机上使该组工作→ ACI .yml配置:

name: webapp-containers
apiVersion: '2018-10-01'
location: eastus
properties: # Properties of a container group
    containers: # Array of container instances in group

    - name: web # Instance name
      properties: # Instance properties
        image: johnvorsten/my_site_web:1.08
        environmentVariables: 
              [shortened...]
            - name: WEBAPP_INTERNAL_PORT
              value: '8000'
        resources:
            requests: 
                cpu: 1
                memoryInGb: 1
        ports: # Exposed on the container instance
            - protocol: tcp
              port: '8000'

    - name: webapp-proxy
      properties:
        image: johnvorsten/my_site_nginx:1.02
        resources:
            requests:
                cpu: 1
                memoryInGb: 0.5
        environmentVariables: 
            - name: PROXY_EXTERNAL_PORT
              value: '80' # Exposed on container
            - name: PROXY_EXTERNAL_PORT_HTTPS
              value: '443' # Exposed on container
            - name: WEBAPP_INTERNAL_PORT
              value: '8000'
            - name: WEBAPP_HOSTNAME_AZURE
              value: web

        ports: # Exposed on instance
            - protocol: tcp
              port: '80'
            - protocol: tcp
              port: '443'
        volumeMounts:
        - mountPath: /home/apps/web/static-serve
          name: static-serve

    imageRegistryCredentials:
    - server: index.docker.io
      username: username
      password: password

    osType: Linux
    ipAddress:
        type: Public
        dnsNameLabel: jv-webapp-group
        ports: # Exposed in container group (external)
            - protocol: tcp
              port: '80'
            - protocol: tcp
              port: '443'

    volumes: 
    - name: static-serve
      emptyDir: {}
tags: {}
type: Microsoft.ContainerInstance/containerGroups

我的nginx配置文件:

upstream upstream_server {
    server web:8000;
}

server {
    listen 80;
    listen [::]:443 ssl;
    listen 443 ssl;

    server_name localhost; # Change when deploying to production

    ssl_protocols TLSv1.2;

    ssl_ciphers [...]
    ssl_prefer_server_ciphers  on;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  24h;

    keepalive_timeout 300; # up from 75 secs default

    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains';

    ssl_certificate      /etc/nginx/ssl.crt;
    ssl_certificate_key  /etc/nginx/ssl.key;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    location / {
        proxy_pass http://upstream_server;
        proxy_set_header Connection "";

        # See ip address of client (not proxy)
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header Host $host;

        # Not sure what this is useful for
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_redirect off;

        error_log  /var/log/nginx/proxy_pass_log.log;
    }

    location /static-serve/ {
        alias /home/app/web/static-serve/;
    }

} # End server

2 个答案:

答案 0 :(得分:0)

MSDN :

在容器组中,容器实例可以通过本地主机在任何端口上相互访问,即使这些端口未在组的IP地址上或容器的外部公开

答案 1 :(得分:0)

J.Vo提供的答案是正确的,但为了更好地理解, 容器组是在同一主机上运行并共享相同资源和生命周期的容器的集合。这个概念更像Kubernetes中的Pod,而不像docker-compose中的容器。

因此,如果要请求在8000端口上运行/公开的任何应用容器,则可以将URI设为localhost:8000,而不是web:8000

相关问题