首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头集装箱中的锈蚀TCP服务器

码头集装箱中的锈蚀TCP服务器
EN

Stack Overflow用户
提问于 2022-09-22 23:21:10
回答 1查看 39关注 0票数 0

我很难理解为什么tcp服务器不能接受外部请求。

我的服务器:

代码语言:javascript
复制
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();
        });
    }
}

码头档案

代码语言:javascript
复制
FROM rust:1.31

WORKDIR /usr/src/proto-rust
COPY . .

RUN cargo install --path .

EXPOSE 8080

CMD ["cargo", "run"]

在本地运行,这是可行的

代码语言:javascript
复制
nc 0.0.0.0 8080

在运行以下操作之后:

代码语言:javascript
复制
docker run --rm -p 8080:8080 --name my-running-app proto-rust

检查码头桥

代码语言:javascript
复制
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": {}
    }
]

运行以下任一项都不起作用:

代码语言:javascript
复制
nc 172.17.0.2 8080
代码语言:javascript
复制
nc localhost 8080

我不知道从这里往哪里走。我认为我的码头集装箱ip地址是错误的,因为netcat看不到开放的端口?我在这里不太确定。为什么我还需要额外的地址和网桥?野生对接者不能就这样暴露在本地主机上。

EN

回答 1

Stack Overflow用户

发布于 2022-09-23 17:53:39

我最初创建了服务器127.0.0.1,之后将其更改为0.0.0.0,因为docker只在本地主机上绑定。但是,我没有运行docker,这意味着更新从未应用于docker映像。跑后

代码语言:javascript
复制
docker build -t proto-rust . 

以下工作:

代码语言:javascript
复制
nc localhost 8080
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73821546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档