我有一个使用docker compose设置的nginx反向代理。当我与<html>
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css">
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
</head>
<body>
<!--
Bootstrap docs: https://getbootstrap.com/docs
-->
<div id="myGroup" class="container">
<div class="panel">
<h2>My "collapse" example</h2>
<div class="row">
<div class="col-sm-6">
<h3>SOME STATIC TEXT</h3>
</div>
<div class="col-sm-3">
<a class="btn btn-link" id="checkout_click" data-toggle="collapse" href="#collapseOne" role="button" aria-expanded="false" aria-controls="collapseOne">
<strong>LINK BUTTON</strong>
</a>
</div>
<div class="col-sm-3">
<a class="btn btn-danger btn-lg btn-block text-bold" id="booking_click" data-toggle="collapse" href="#collapseTwo" role="button" aria-expanded="false" aria-controls="collapseTwo">
<strong>BUTTON</strong>
</a>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="collapse" id="collapseOne">
<div class="bg-info text-white first">
FIRST ROW CONTENT
</div>
</div>
</div>
<div class="col-sm-12">
<div class="collapse" id="collapseTwo">
<div class="bg-success text-white second">
SECOND ROW CONTENT
</div>
</div>
</div>
</div>
</body>
</html>
一起运行所有服务时,它可以完全正常工作。但是,我希望能够运行单个容器,并独立于代理容器启动(docker-compose up
)和停止它们。这是我当前的nginx配置的片段:
docker-compose up service1
现在,如果我同时运行service1,service2和代理,一切都很好。但是,例如,如果我运行代理并且仅运行service2,则会出现以下错误:server {
listen 80;
location /service1/ {
proxy_pass http://service1/;
}
location /service2/ {
proxy_pass http://service2/;
}
}
。我要在这里执行的操作是仅引发一些HTTP错误,并在该服务确实出现时适当地路由到它。
有什么办法可以得到这种行为?
答案 0 :(得分:1)
听起来像您需要使用负载平衡。我相信通过负载平衡,它将尝试在服务器/服务之间共享负载。如果其中一个发生故障,则应自动使用其他状态。
示例
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
答案 1 :(得分:1)
您的问题出在nginx。如果无法解析上游主机名之一,它将无法启动。
在您的情况下,如果服务未启动,则docker服务名称将无法解析。
请尝试一种解决方案here,例如在位置级别进行解决。
(编辑)以下示例对我有用:
events {
worker_connections 4096;
}
http {
server {
location /service1 {
resolver 127.0.0.11;
set $upstream http://service1:80;
proxy_pass $upstream;
}
location /service2 {
resolver 127.0.0.11;
set $upstream2 http://service2:80;
proxy_pass $upstream2;
}
}
}