Docker中的Golang Hello World Web应用返回404

Docker中的Golang Hello World Web应用返回404,docker,go,Docker,Go,我正在尝试运行一个简单的“Hello world”Golang http应用程序。它在端口6258上运行。我在Debian 9 Docker容器中运行它。当我尝试在Chrome中访问localhost:6258时,它只是一个空白页。我花了好几个小时想弄明白。我读到的所有东西都表明这应该是可行的,但事实并非如此。我已经不知道了,但我显然做错了什么。以下是我所做的一切: 我使用以下命令下载了最新的Docker Debian 9图像: docker pull debian:latest docker

我正在尝试运行一个简单的“Hello world”Golang http应用程序。它在端口6258上运行。我在Debian 9 Docker容器中运行它。当我尝试在Chrome中访问localhost:6258时,它只是一个空白页。我花了好几个小时想弄明白。我读到的所有东西都表明这应该是可行的,但事实并非如此。我已经不知道了,但我显然做错了什么。以下是我所做的一切:

我使用以下命令下载了最新的Docker Debian 9图像:

docker pull debian:latest
docker build -t testuser/testname:testtag .
docker run -p 6258:6258 -i -t 939e7900be22  /bin/bash
我创建了一个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
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)
}
我通过运行以下命令,使用Dockerfile创建了一个图像:

docker pull debian:latest
docker build -t testuser/testname:testtag .
docker run -p 6258:6258 -i -t 939e7900be22  /bin/bash
通过运行以下命令,我从该图像创建了一个容器:

docker pull debian:latest
docker build -t testuser/testname:testtag .
docker run -p 6258:6258 -i -t 939e7900be22  /bin/bash
我运行此命令以完成Go安装(如果我将其包含在Dockerfile中,则该命令似乎不起作用):

我创建了应用程序本身(
vim$HOME/work/src/hello world/test/main.go
):

main.go:

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
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 inspector显示为0字节,控制台显示“加载资源失败:服务器响应状态为404(未找到)”

telnet
可以连接到本地主机: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
curl localhost:6258——详细
*重建的URL到:localhost:6258/
*正在尝试::1。。。
*TCP_节点集
*已连接到本地主机(::1)端口6258(#0)
>GET/HTTP/1.1
>主机:localhost:6258
>用户代理:curl/7.54.0
>接受:*/*
>
未找到

我花了一个小时在谷歌上搜索这个,但没有发现任何有用的东西。我没有主意了。我对Docker不太在行,这是我第一次尝试使用Go,所以如果我错过了一些明显的东西,我不会感到惊讶。如有任何帮助/建议,将不胜感激。谢谢

你能给我看看输出docker ls吗?我已经重新创建了你的环境,一切都很好。请出示您的docker ls,并告诉我您运行main时发生了什么。goI可能误解了您的请求,但当我运行
docker ls
时,它说它不是命令:
docker:'ls'不是docker命令。
当我运行
时,运行src/hello world/test/main.go
,终端光标在没有提示的情况下移动到新行,指示命令正在无限期运行,直到我用ctrl+c中断它为止。如果我在后台用
go run src/hello world/test/main.go&
运行它,它将输出进程ID并继续在后台运行
top
确认它仍在运行,与提供的ID匹配。另外,感谢您迄今为止的帮助!