我正在尝试从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)
1条答案
按热度按时间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
起作用