我正在尝试运行一个简单的“ Hello world” Golang http应用。它运行在端口6258上。我在Debian 9 Docker容器中运行它。当我尝试在Chrome上通过localhost:6258访问它时,它只是一个空白页。我花了数小时试图弄清楚这一点。我读过的所有内容都表明这应该可行,但事实并非如此。我不知道了,但是我显然做错了什么。这是我所做的一切:
我使用以下命令下载了最新的Docker Debian 9映像:
docker pull debian:latest
我创建了一个Dockerfile来公开端口并设置环境。
Dockerfile:
FROM debian:latest
RUN apt-get -y update
RUN apt-get -y upgrade
RUN apt-get -y install sudo coreutils less vim man wget curl procps ca-certificates gnupg software-properties-common unzip libssl-dev libpcre3-dev gcc make zlib1g-dev net-tools
RUN curl -O https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz
RUN tar xvf go1.10.3.linux-amd64.tar.gz
RUN sudo chown -R root:root ./go
RUN sudo mv go /usr/local
RUN echo 'export GOPATH=$HOME/work' >> /etc/profile
RUN echo 'export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin' >> /etc/profile
RUN mkdir -p $HOME/work/src/hello-world/test
EXPOSE 6258
我通过运行以下命令使用Dockerfile创建了一个映像:
docker build -t testuser/testname:testtag .
我通过运行以下命令从该图像中创建了一个容器:
docker run -p 6258:6258 -i -t 939e7900be22 /bin/bash
我运行了此命令以完成Go安装(如果我将其包含在Dockerfile中似乎无法正常工作):
source /etc/profile
我自己创建了应用(vim $HOME/work/src/hello-world/test/main.go
):
main.go:
package main
import (
"fmt"
"net/http"
)
func helloWorld(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello World")
}
func main() {
http.HandleFunc("/", helloWorld)
http.ListenAndServe(":6258", nil)
}
我通过以下方式运行该应用程序:
go run src/hello-world/test/main.go
当我在Chrome中访问localhost:6258时,没有显示“ Hello World”,而是一个空白页面。 Chrome检查器显示0字节,控制台显示“无法加载资源:服务器响应状态为404(未找到)”。
telnet
可以连接到localhost:6258。冰壶确认404:
curl localhost:6258 --verbose
* Rebuilt URL to: localhost:6258/
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 6258 (#0)
> GET / HTTP/1.1
> Host: localhost:6258
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Date: Fri, 22 Jun 2018 19:44:11 GMT
< Accept-Ranges: bytes
< Content-Length: 0
<
* Connection #0 to host localhost left intact
我花了一个小时来搜索,但是还没有发现任何帮助。我没主意了。我对Docker不太满意,这是我第一次尝试使用Go,因此,如果我错过了明显的东西,我不会感到惊讶。任何帮助/建议,将不胜感激。谢谢!