在Docker中,我使用docker network create usta_network
命令创建了一个新网络,并在docker-compose.yml文件中的服务声明中引用了该网络。
没关系,我现在可以使用容器名称ping服务,但是如何在Nginx Upstream声明中引用容器的名称?在容器之间进行访问是最好还是更好的做法?
docker.compose for nginx
version: '2'
services:
nginx-main:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- /var/log/nginx:/var/log/nginx
container_name: nginx_main
networks:
default:
external:
name: usta_network
./nginx.conf
用户nginx;
http {
server {
listen 80;
index index.php index.html index.htm;
server_name example.org www.example.org;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://rahmanusta_upstream;
}
}
upstream rahmanusta_upstream {
server rahmanusta_wp:6565;
}
}
docker-compose for mysql + wordpress
version: '2'
services:
mysql-db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: mysql_db
MYSQL_USER: root
MYSQL_PASSWORD: pass
container_name: mysql_db
rahmanusta-wp:
depends_on:
- mysql-db
image: wordpress:latest
ports:
- "6565:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: pass
container_name: rahmanusta_wp
volumes:
db_data:
networks:
default:
external:
name: usta_network
docker network inspect usta_network
[
{
"Name": "usta_network",
"Id": "b971429c1ddcfa791bdfff0a6f9463ab9cfb9ae04ba6a3aa60ce08ca11d0a5ab",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.20.0.0/16",
"Gateway": "172.20.0.1/16"
}
]
},
"Internal": false,
"Containers": {
"16cc89ca548fe90fb8ed9431d8e9633c341373344304ec3320acee1a81090709": {
"Name": "rahmanusta_wp",
"EndpointID": "d310cbf9617958226d36d5f9e0d804c113093097669b1d5ae8bed90d31dfca2f",
"MacAddress": "02:42:ac:14:00:03",
"IPv4Address": "172.20.0.3/16",
"IPv6Address": ""
},
"5b0f7a7d95b23b6e69b17f85ebff5d652bdbcba305755169c6b9f78199fbf346": {
"Name": "mysql_db",
"EndpointID": "d2c304b450ce96d309ef51319aa42336bb742d99db095e98e129e547aee820c3",
"MacAddress": "02:42:ac:14:00:02",
"IPv4Address": "172.20.0.2/16",
"IPv6Address": ""
},
"addf3c475fcfd5566b3d1c4b4a951f78978c07265211746f79711f38c5cd9649": {
"Name": "nginx_main",
"EndpointID": "3f4106184dbe805c509011c3dc42c673c85fcf2eb08441a5ecf24b9c5c68e2d4",
"MacAddress": "02:42:ac:14:00:04",
"IPv4Address": "172.20.0.4/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
感谢。
答案 0 :(得分:1)
在您的docker-compose.yml中,您将使用相关名称命名每个服务。假设我在我的nginx docker容器后面创建了一个名为jenkins1的jenkins实例。
在我的nginx.conf文件的http部分中,我将上游服务器命名为:
$(document).ready(function() {
function viewPeriods() {
$.ajax({
type: "POST",
data: {
type: "view"
},
url: "/staff/main/ajax/marking-periods.php",
success: function(data) {
$("#periods").hide().html(data).fadeIn();
}
});
}
$("#save-new").click(function() {
var title = $("#title").val();
var start = $("#start").val();
var end = $("#end").val();
var gstart = $("#gstart").val();
var gend = $("#gend").val();
var ptype = $("#type").val();
$.ajax({
type: "POST",
data: {
title: title,
start: start,
end: end,
gstart: gstart,
gend: gend,
ptype: ptype,
type: "add"
},
url: "/staff/main/ajax/marking-periods.php",
dataType: "json",
success: function(data) {
$.notify({
icon: data.icon,
title: data.title,
message: data.message
},
{
element: 'body',
allow_dismiss: true,
newest_on_top: false,
type: data.status,
icon_type: 'class',
template: '<div data-notify="container" class="col-xs-11 col-sm-3 alert alert-{0}" role="alert">' +
'<button type="button" aria-hidden="true" class="close" data-notify="dismiss"><i class="fa fa-times"></i></button>' +
'<span data-notify="icon"></span> ' +
'<span data-notify="title">{1}</span> ' +
'<span data-notify="message">{2}</span>' +
'</div>'
});
$("#new-period").modal("hide");
viewPeriods();
}
});
});
viewPeriods();
});
在服务器块中,我可以调用它,如下所示;
upstream jenkins {
server jenkins1:8080;
}
这会将所有访问您的nginx容器端口的流量定向到jenkins1服务容器上的端口8080。
编辑基于更新的问题
在docker-compose.yml中,使用外部链接链接.yml文件外部的两个容器。您的nginx服务部分应为:
location / {
proxy_pass https://jenkins;
}