gpt4 book ai didi

Docker curl 到同一主机中的其他容器

转载 作者:行者123 更新时间:2023-12-02 07:29:44 26 4
gpt4 key购买 nike

我有2个容器,第一个在端口80上运行,另一个在端口8022上运行,我尝试从在端口8022上运行的容器向端口80上的容器发出curl请求,我得到空响应。

对于端口 8022 上的容器,我运行以下命令:

docker run -d -it --privileged -p 0.0.0.0:8022:80 -v ~/path/to/my/app:/var/www/app --network=bridge --memory 1073741824  my/app:latest

如果通过示例 google 向其他主机发出curl 请求,我会得到正确的响应。

感谢帮助

已更新好的,我可以解决这个问题,创建一个网络并在两个容器中使用该网络,然后将端口 80 容器的 IP 添加到 8022 容器的主机文件中。

感谢@zero298的帮助!!

最佳答案

这是一个非常简单的示例,说明如何通过用户定义的桥接网络进行容器间通信。为了实现这一点,我定义了以下 3 个文件:

~/Desktop/code/bootstrap.sh

这将通过首先创建一个用户定义的隔离网络来启动演示,您的容器可以通过该网络进行通信,名为 example_nw。然后,它创建一个名为“servertest”的新容器,该容器将保存我们将curl 到的服务器。我使用 node 容器是因为我更熟悉它。

它还将创建一个绑定(bind)到您的计算机 ~/Desktop/code/ 目录的卷,该目录应包含我们正在使用的所有代码,包括节点 server.js脚本。服务器监听端口 3000 并响应:“Hello World`”。

创建服务器后,它会启动另一个名为“curler”的容器,该容器将安装curl(debian 未附带安装)。之后,它 curl 到 servertest:3000 并获得正确的回复,因为它们都连接到同一个 docker、用户定义的网络:example_nw

完成后,它会通过终止服务器容器并删除 example_nw 网络来进行清理。

#!/usr/bin/env bash

# Create user-defined network
docker network create example_nw

# Create server to listen to pings on our network
docker run \
--rm \
-d \
-v ~/Desktop/code:/my/stuff \
--name servertest \
--expose 3000 \
--network example_nw \
node node /my/stuff/server

# Create a curler
docker run \
-it \
--rm \
-v ~/Desktop/code:/my/stuff \
--name pingtest \
--network example_nw debian \
/my/stuff/curler.sh

# Clean up
docker container stop servertest
docker network rm example_nw

~/Desktop/code/server.js

这是一个非常简单的 Node.js 脚本,它将创建一个监听端口 3000 的服务器。

/*jslint node:true, esversion:6*/

"use strict";

const http = require("http"),
port = 3000;

// Make a server
const server = http.createServer((req, res) => {
console.log("Got request");
res.end("Hello World!\n");
});

// Have the server listen
server.listen(port, (err) => {
if (err) {
return console.error(err);
}
console.log(`Listening on port: ${port}`);
});

~/Desktop/code/curler.sh

这只是在容器中安装curl,然后 curl 到servertest:3000

#!/usr/bin/env bash

apt update
apt install -y curl
curl servertest:3000

运行~/Desktop/code/bootstrap.sh将演示通信。

<小时/>

我建议阅读 Docker 文档:Work with network commands因为它提供了很多很好的示例和用例。

关于Docker curl 到同一主机中的其他容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47017801/

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