在我的虚拟机中,我有以下docker-compose.yml
文件:
services:
nginx:
image: "nginx:1.23.1-alpine"
container_name: parse-nginx
ports:
- "80:80"
mongo-0:
image: "mongo:5.0.6"
container_name: parse-mongo-0
volumes:
- ./mongo-0/data:/data/db
- ./mongo-0/config:/data/config
server-0:
image: "parseplatform/parse-server:5.2.4"
container_name: parse-server-0
ports:
- "1337:1337"
volumes:
- ./server-0/config-vol/configuration.json:/parse-server/config/configuration.json
command: "/parse-server/config/configuration.json"
为server-0
指定的configuration.json
文件如下所示:
{
"appId": "APPLICATION_ID_00",
"masterKey": "MASTER_KEY_00",
"readOnlyMasterKey": "only",
"databaseURI": "mongodb://mongo-0/test"
}
使用docker compose up
后,我从虚拟机执行以下命令:
curl -X POST -H "X-Parse-Application-Id: APPLICATION_ID_00" -H "Content-Type: application/json" -d '{"score":1000,"playerName":"Sean Plott","cheatMode":false}' http://localhost:1337/parse/classes/GameScore
输出为:
{"objectId":"yeHHiu01IV","createdAt":"2022-08-25T02:36:06.054Z"}
我使用以下命令进入nginx
容器:
docker exec -it parse-nginx sh
对parse-server-0
执行ping操作,结果显示它确实解析为正确的IP地址。然后,我运行上述curl
命令的修改版本,将localhost
更改为该主机名:
curl -X POST -H "X-Parse-Application-Id: APPLICATION_ID_00" -H "Content-Type: application/json" -d '{"score":1000,"playerName":"Sean Plott","cheatMode":false}' http://parse-server-0:1337/parse/classes/GameScore
它给我一个504错误,如下所示:
...
<title>504 DNS look up failed</title>
</head>
<body><div class="message-container">
<div class="logo"></div>
<h1>504 DNS look up failed</h1>
<p>The webserver reported that an error occurred while trying to access the website. Please return to the previous page.</p>
...
但是,如果我按如下方式使用no_proxy
,它就可以工作:
no_proxy="parse-server-0" curl -X POST -H "X-Parse-Application-Id: APPLICATION_ID_00" -H "X-Parse-Master-Key: MASTER_KEY_00" -H "Content-Type: application/json" -d '{"score":1000,"playerName":"Sean Plott","cheatMode":false}' http://parse-server-0:1337/parse/classes/GameScore
输出也是这样:
{"objectId":"ICTZrQQ305","createdAt":"2022-08-25T02:18:11.565Z"}
我对此感到非常困惑。很明显,parse-server-0
可以通过ping到达。如果不使用no_proxy
,它怎么会抛出504错误?parse-nginx
容器使用默认设置和配置。我没有设置任何代理。我正在使用它测试从另一个容器到parse-mongo-0
的curl
命令。如果有任何帮助,将不胜感激。/etc/resolv.conf
的内容为:
nameserver 127.0.0.11
options edns0 trust-ad ndots:0
在parse-nginx
内运行echo $HTTP_PROXY
将返回:
http://10.10.10.10:8080
此值在VM中为空。
3条答案
按热度按时间kognpnkq1#
您的代理服务器似乎没有在此Docker网络中运行。因此,当请求转到该代理服务器时,它将不会查询此网络上的Docker DNS来解析其他容器名称。
如果你的应用程序没有在Docker网络之外发出请求,你可以删除代理设置。否则,你需要为你将要访问的其他Docker容器设置
no_proxy
。zbdgwd5y2#
请检查
echo $http_proxy
的值。请注意此处的小写字母。如果设置了此值,这意味着curl被配置为使用代理。DNS解析时得到504,很可能是因为您的parse-nginx
容器无法到达ip10.10.10.10
。指定no_proxy
会告诉它忽略http_proxy环境变量(覆写它)并在没有任何Proxy的情况下发出要求。holgip5t3#
在我的虚拟机中,
~/.docker/config.json
文件的内容如下:这是不久前实现的,作为一些网络问题的临时修复。后来实现了一个安全证书。我完全忘记了修复。清除
~/.docker/config.json
文件,重做docker compose up
修复了这个问题。我不再需要no_proxy
来使curl
工作。一切都是现在应该的。非常感谢你的帮助。