gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:09:51 24 4
gpt4 key购买 nike

我是Docker和Kubernetes的新手。我正在阅读一些文档并在本地运行安装程序。我对此有一些疑问。
我从 go 文件创建了一个图像,该图像打印“hello world”。这是示例文件

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时,这是行不通的。
任何输入。先谢谢您的帮助。

最佳答案

默认情况下,容器部署在docker-bridge网络内部。主机与连接容器的VLAN之间没有隐式路由:这就是您阅读的文档建议运行客户端容器以检查Web应用程序是否确实在工作的原因-另一个容器可以到达go容器,因为它连接在同一子网中。
但是,例如,如果您有一个正在监听8080端口的容器,则在启动该容器时可以使用-p <src>:<dst>选项,以便在host-machine:<src>container:<dst>之间创建转发规则。
如果您使用此命令启动go容器,则可以从主机通过localhost:9999访问该网站

docker run -d -p 9999:8080 my-go-image

关于docker - 客户端容器以测试容器中的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63492978/

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