从Docker本地运行简单HTTP服务器的问题

chhqkbe1  于 2023-03-01  发布在  Docker
关注(0)|答案(1)|浏览(195)

我正在尝试从Docker运行一个简单的Julia HTTP服务器。

FROM julia:latest

COPY server.jl server.jl

ENV PORT=8080

RUN julia -e 'using Pkg; Pkg.add("HTTP");'

CMD [ "julia", "server.jl"]

我通过这个bash命令启动Docker

docker run -it --rm -p 8080:8080 test-julia

然后我通过curl向127.0.0.1:8080发送请求

curl: (52) Empty reply from server

但是,如果我只是使用本地Julia运行服务器,而不是通过julia --project=. server.jl使用Docker,那么它运行良好,并按预期返回Hello
我需要用Docker做什么设置才能使它工作?
server.jl的内容很简单,只返回“hello”,如下所示

using HTTP

ENV["PORT"] = "8080"

const PORT = parse(Int, ENV["PORT"])

print("Listening on port $PORT")

# HTTP.listen! and HTTP.serve! are the non-blocking versions of HTTP.listen/HTTP.serve
server = HTTP.serve(PORT) do request::HTTP.Request
    print("got a request")
   @show request
   @show request.method
   @show HTTP.header(request, "Content-Type")
   @show request.body
   try
       return HTTP.Response("Hello")
   catch e
       return HTTP.Response(400, "Error: $e")
   end
end

#close(server)
mwkjh3gx

mwkjh3gx1#

https://discourse.julialang.org/t/http-jl-in-docker/20764/3
只需使用0.0.0.0侦听所有地址,因为默认情况下,HTTP.jl包使用Socket.localhost作为URL,即127.0.0.1,它只适用于来自docker内部的请求,而不适用于来自外部的请求。
server = HTTP.serve("0.0.0.0", PORT) do request::HTTP.Request
起作用

相关问题