我正在尝试在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
答案 0 :(得分:0)
在容器组中,容器实例可以通过本地主机在任何端口上相互访问,即使这些端口未在组的IP地址上或容器的外部公开
答案 1 :(得分:0)
J.Vo提供的答案是正确的,但为了更好地理解, 容器组是在同一主机上运行并共享相同资源和生命周期的容器的集合。这个概念更像Kubernetes中的Pod,而不像docker-compose中的容器。
因此,如果要请求在8000端口上运行/公开的任何应用容器,则可以将URI设为localhost:8000
,而不是web:8000