gpt4 book ai didi

docker - docker-compose网站和应用服务器组成强制内部重定向

转载 作者:行者123 更新时间:2023-12-02 19:29:09 28 4
gpt4 key购买 nike

学习docker和docker-compose,遇到一个stickler:

这是我的docker-compose.yml文件:

version: '3'
services:
site:
build:
context: "."
dockerfile: "Dockerfile-site-dev"
environment:
- "HTTPS_METHOD=noredirect"
volumes:
- "./site/:/usr/share/nginx/html"
ports:
- "8080:80"
app:
build:
context: "."
dockerfile: "Dockerfile-server-dev"
environment:
- "HTTPS_METHOD=noredirect"
volumes:
- "./app/:/app/"
ports:
- "3000:3000"

这会在 Alpine 图像中实例化一个nginx Web前端和一个nodejs / express后端。

问题是,当我从网页触发“get”到“ http://app:3000/service”到nodejs应用程序容器时,它重定向到https(失败,因为我没有在容器上设置https,这是一个自组织内部测试&http只可以。)

尝试使用jquery $ .get和axios.get-相同的结果。

我可以执行到'site'容器中并ping'app'正常,如果我从'site'容器中 curl ' http://app:3000/testme'(它只返回一个“I'm Here !!!”响应),就可以正常工作。

但是,当我从页面执行307时,会强制执行某些操作。

我在nginx配置中没有看到任何重定向(无论如何它只会影响页面访问),并且我的nodejs应用程序代码中没有任何内容可触发重定向。

似乎docker中的某件事正在强制重定向。

请注意,在docker-compose文件中,我在两个容器上都设置了环境“HTTPS_METHOD = noredirect”,这似乎没有任何作用。

任何见解表示赞赏。

新增:

Dockerfile-site-dev:
FROM nginx:stable-alpine
WORKDIR /usr/share/nginx/html

Dockerfile-app-dev:
FROM node:10.13-alpine
WORKDIR /app
RUN yarn global add nodemon
CMD ["sh","-c", "yarn install && nodemon ./index.js"]

在站点方面,nginx配置来自 Alpine 基础镜像。

这是触发对应用服务器的请求的index.html:
<!DOCTYPE html>
<html>
<head>
<title>Vote SSE Demo</title>
<style>
body {font-family:Arial, Helvetica, sans-serif;
text-align:center;}
#yes,#no,#message {font-size: 1.5em;}
button {border-radius:0.5em;background-color:lightgray;}
</style>
</head>
<body>
<h1>Will "Hello, World!" bring world peace?</h1>
<div><button id="yes">Yes</button></div><br>
<div><button id="no">No</button></div>
<br/><br/>
<div id="message"></div>
</body>
<script src="./jquery-2.1.4.min.js"></script>
<script src="./axios.min.js"></script>
<script>
function vote(yes) {
console.log('voting: ' + (yes? 'yes' : 'no'));
axios.get("http://app:3000/vote?yes=" + yes)
.then(function(rsp) {
$("#yes").hide();
$("#no").hide();
$("#message").text("Thank you for your vote!");
})
.catch(function(err) {
console.log('Axios get error: ' + err);
});
}

$("#yes").on("click", function(){
vote(true);
});

$("#no").on("click", function() {
vote(false);
});
</script>
</html>

对于应用程序,这是package.json文件:
{
"name": "callbacks",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"express": "^4.16.4"
}
}

这是index.js:
const express = require('express');
const sse = require('./sse');

const app = express()

let connections = [],
votes = {yes: 0, no: 0};

app.use(sse);

app.get('/vote', function(req, res) {
console.log('server in vote...');
let i;

if (req.query.yes === 'true')
votes.yes++;
else
votes.no++;

for (i = 0; ix < connections.length; ++i) {
connections[i].sseSend(votes);
}

res.sendStatus(200);
});

app.get('/stream', function(req, res) {
res.sseSetup();
res.sseSend(votes);
connections.push(res);
});

app.get('/testme', function(req, res) {
console.log('server: in testme');
res.send("I'm here!!!\n");
})

app.listen(3000);
console.log('Listening on port 3000');

SSE是ServerEvent,这是我要测试的内容。

否则,一切都很基本。

我确实认为docker是可疑的,因为我可以从站点容器中 curl 应用程序而不会出现问题(或者也许这就是为什么它不值得怀疑的事实……)

最佳答案

html在浏览器(docker外部)上运行。

浏览器不知道任何“应用”主机。

因此,在您的html中,替换为:

    axios.get("http://app:3000/vote?yes=" + yes)


    axios.get("http://localhost:3000/vote?yes=" + yes)

关于docker - docker-compose网站和应用服务器组成强制内部重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53344757/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com