为了账号安全,请及时绑定邮箱和手机立即绑定

CURL 在 Docker 映像中不起作用 [无法访问 Docker 映像中的主机]

CURL 在 Docker 映像中不起作用 [无法访问 Docker 映像中的主机]

Go
开心每一天1111 2022-05-18 13:48:40
码头工人文件# Start from the latest golang base imageFROM golang:latest# Add Maintainer InfoLABEL maintainer="Sumit Thakur <sumitthakur@yahoo.com>"# Set the Current Working Directory inside the containerWORKDIR /app# Copy go mod and sum filesCOPY go.mod go.sum ./# Download all dependencies. Dependencies will be cached if the go.mod and go.sum files are not changedRUN go mod download# Copy the source from the current directory to the Working Directory inside the containerCOPY . .# Build the Go appRUN go build -o testapp myapplication.go testapp.go# Expose port 50051 / for internal comunication ENV PORT 50051RUN echo $PORTEXPOSE ${PORT}# Command to run the executableCMD ["./testapp"]构建 Docker 文件docker build -t testapp  -f Dockerfile .这是完美的工作运行 Docker 文件docker run -d -p 50051:50051 testapp这也可以正常工作我检查正在运行的容器docker ps这会给我CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                      NAMES57cd3c01bcda        testapp           "./testapp"       2 seconds ago       Up 2 seconds        0.0.0.0:50051->50051/tcp   gracious_bhaskara当我检查网络检查时docker network inspect bridge
查看完整描述

3 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

从评论中的讨论来看,问题似乎与https握手有关。

一个简单的解决方案是使用以下 URL 查询服务:

curl -H "Content-type:application/json" -X GET 'https://localhost:50051/testapp/v1/order' -v -k

使用-k,您将忽略HTTPS验证。

注意:我已将 URL 从更改httphttps.


查看完整回答
反对 回复 2022-05-18
?
守候你守候我

TA贡献1802条经验 获得超10个赞

从容器内部,您需要侦听所有接口,而不是 localhost 或环回接口。网络是在 docker 中命名的,因此您不仅可以获得一个新的私有 ip,还可以获得容器内部一个无法从外部访问的单独环回接口。为此,请更改:

http.ListenAndServe("localhost:50051", headersOk)

到:

http.ListenAndServe(":50051", headersOk)


查看完整回答
反对 回复 2022-05-18
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

上提供的代码main.go不会启动 TLS,因此请停止使用 curl 来卷曲https,它将无法正常工作。卷曲http会起作用


package main


import (

    "io"

    "net/http"


    "github.com/gorilla/handlers"

)


func main() {

    http.HandleFunc("/testapp/v1/order", testHandler)

    headersOk := handlers.AllowedHeaders([]string{""})

    http.ListenAndServe(":50051", headersOk)

}

func testHandler(w http.ResponseWriter, r *http.Request) {

    io.WriteString(w, "Heyyy!")

}

该命令openssl s_client https://localhost:50051/testapp/v1/order -connect localhost:50051向您确认您请求的端口上不存在 TLS


很多评论确认 usinghttps不相关,再次在您的代码上未激活 TLS


curl -H "Content-type:application/json" -X GET 'http://localhost:50051/testapp/v1/order'作品。再次确认 不使用 TLS


结论:


https当您的代码上未激活 TLS 时,不要尝试 curl


查看完整回答
反对 回复 2022-05-18
  • 3 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信