我很难理解为什么tcp服务器不能接受外部请求。
我的服务器:
use std::io::Write;
use std::net::TcpListener;
use std::thread;
fn main() {
let listener = TcpListener::bind("0.0.0.0:8080").unwrap();
println!("listening started, ready to accept");
for stream in listener.incoming() {
thread::spawn(|| {
let mut stream = stream.unwrap();
stream.write(b"Hello World\r\n").unwrap();
});
}
}码头档案
FROM rust:1.31
WORKDIR /usr/src/proto-rust
COPY . .
RUN cargo install --path .
EXPOSE 8080
CMD ["cargo", "run"]在本地运行,这是可行的
nc 0.0.0.0 8080在运行以下操作之后:
docker run --rm -p 8080:8080 --name my-running-app proto-rust检查码头桥
docker network inspect bridge
[
{
"Name": "bridge",
"Id": "78d335687fcd96ad1051ca17662024708dff9db4d3043b787a43d29edbb8ff58",
"Created": "2022-09-03T01:53:48.606052848Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"21a4f5fec2cb2a880ed01c044ccaf001e120c9b507d34fabf93c9da21957d558": {
"Name": "my-running-app",
"EndpointID": "34a003ea12612d479e47a61478f3a445455f919a66350b9b5fde651e6cb8a12b",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]运行以下任一项都不起作用:
nc 172.17.0.2 8080nc localhost 8080我不知道从这里往哪里走。我认为我的码头集装箱ip地址是错误的,因为netcat看不到开放的端口?我在这里不太确定。为什么我还需要额外的地址和网桥?野生对接者不能就这样暴露在本地主机上。
发布于 2022-09-23 17:53:39
我最初创建了服务器127.0.0.1,之后将其更改为0.0.0.0,因为docker只在本地主机上绑定。但是,我没有运行docker,这意味着更新从未应用于docker映像。跑后
docker build -t proto-rust . 以下工作:
nc localhost 8080https://stackoverflow.com/questions/73821546
复制相似问题