我是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时,这是行不通的。
任何输入。预先感谢您的帮助。
答案 0 :(得分:4)
默认情况下,容器部署在docker-bridge网络内部。主机和连接容器的 VLAN 之间没有隐式路由:这就是您阅读的文档建议运行客户端容器检查该Web应用程序是否确实在工作-另一个容器可以到达go容器,因为它连接在同一子网中。
但是,例如,如果您有一个正在监听端口8080
的容器,则在启动容器时可以使用-p <src>:<dst>
选项,以便在{{ 1}}到host-machine:<src>
。
如果使用此命令启动go容器,则可以从主机上的container:<dst>
进入网站
localhost:9999