客户端容器以测试容器中的服务

时间:2020-08-19 18:30:12

标签: docker

我是Docker和Kubernetes的新手。我正在阅读一些文档并在本地运行安装程序。我对此有一些疑问。

我从 go 文件创建了一张图片,该图片会打印“ hello world”。这是示例go文件

package main

import (
    "fmt"
    "net/http"
)

func helloHandler(w http.ResponseWriter, r *http.Request) {
    response := "Hello World!"
    fmt.Fprintln(w, response)
    fmt.Println("Processing hello request.")
}

func listenAndServe(port string) {
    fmt.Printf("Listening on port %s\n", port)
    err := http.ListenAndServe(":"+port, nil)
    if err != nil {
        panic("ListenAndServe: " + err.Error())
    }
}

func main() {
    http.HandleFunc("/", helloHandler)
    port := "8080"
    go listenAndServe(port)
    select {}
}

这是Dockerfile

FROM golang:1.13
WORKDIR /go/src/hello
COPY ./hello.go /go/src/hello
CMD ["go","run","hello.go"]

此容器已启动并正在运行。容器的IP地址存储在IP变量中。

现在,在文档中说我们需要一个客户端容器来测试此服务。

docker container run --rm busybox wget -qO- $IP:8080 && echo

Status: Downloaded newer image for busybox:latest
Hello World!

我想知道为什么它需要这个客户端容器,而当我直接从本地计算机上获取wget时,这是行不通的。

任何输入。预先感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

默认情况下,容器部署在docker-bridge网络内部。主机和连接容器的 VLAN 之间没有隐式路由:这就是您阅读的文档建议运行客户端容器检查该Web应用程序是否确实在工作-另一个容器可以到达go容器,因为它连接在同一子网中。

但是,例如,如果您有一个正在监听端口8080的容器,则在启动容器时可以使用-p <src>:<dst>选项,以便在{{ 1}}到host-machine:<src>

如果使用此命令启动go容器,则可以从主机上的container:<dst>进入网站

localhost:9999