首页 > 解决方案 > 使用 netcat 连接到运行 golang 服务器的 docker 容器

问题描述

我是码头工人的新手。尝试从用 golang 编写的简单服务器创建图像。服务器侦听端口 8000 并每秒将当前时间写入客户端一次。

package main

import (
    "fmt"
    "io"
    "net"
    "time"
)

func main() {
    listener, err := net.Listen("tcp", "localhost:8000")
    if err != nil {
        panic(err)
    }

    for {
        conn, err := listener.Accept()
        fmt.Println("Received connection")
        if err != nil {
            fmt.Println(err)
            continue
        }

        go handleConnection(conn)
    }
}

func handleConnection(conn net.Conn) {
    defer conn.Close()

    for {
        _, err := io.WriteString(conn, time.Now().Format("15:04:05\n"))
        if err != nil {
            return
        }
        time.Sleep(1 * time.Second)
    }
}

我的 Dockerfile

FROM golang

WORKDIR $GOPATH/src/
RUN mkdir -p sandbox/clock1
WORKDIR $GOPATH/src/sandbox/clock1

COPY . .

RUN go get -d -v ./...

RUN go install -v ./...

EXPOSE 8000

ENTRYPOINT /go/bin/clock1

我用命令启动 docker 容器

docker run -p 8000:8000 -it --name clock1 clock1

然后我尝试使用 docker IP 地址连接到服务器

nc 192.168.1.3 8000

netcat 无法连接并立即存在。你能否指出我做错了什么。

标签: dockergonetcat

解决方案


推荐阅读