本地Docker运行Julia HTTP服务器无响应问题求助
解决Docker中Julia HTTP服务器无响应的问题
问题背景
通过Docker运行Julia HTTP服务器时,外部curl请求返回curl: (52) Empty reply from server,但本地直接运行julia --project=. server.jl可正常返回Hello。
现有配置
Dockerfile:
FROM julia:latest COPY server.jl server.jl ENV PORT=8080 RUN julia -e 'using Pkg; Pkg.add("HTTP");' CMD [ "julia", "server.jl"]
启动命令:
docker run -it --rm -p 8080:8080 test-julia
server.jl原代码:
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)
解决步骤
问题核心是服务器默认只绑定容器内的127.0.0.1地址,外部无法访问,需要修改为绑定0.0.0.0(允许所有网络接口访问),同时优化环境变量配置:
修改server.jl的监听地址
将HTTP.serve(PORT)修改为HTTP.serve("0.0.0.0", PORT),确保服务器监听容器的所有网络接口。移除硬编码的环境变量(可选但推荐)
删除server.jl中的ENV["PORT"] = "8080",直接使用Dockerfile中定义的PORT环境变量,避免配置冲突。
修改后的server.jl代码
using HTTP const PORT = parse(Int, ENV["PORT"]) print("Listening on port $PORT") server = HTTP.serve("0.0.0.0", 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)
- 重新构建并运行容器
docker build -t test-julia . docker run -it --rm -p 8080:8080 test-julia
此时再用curl 127.0.0.1:8080即可正常返回Hello。
内容的提问来源于stack exchange,提问作者xiaodai
相关产品推荐
相关产品推荐

