You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地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(允许所有网络接口访问),同时优化环境变量配置:

  1. 修改server.jl的监听地址
    将HTTP.serve(PORT)修改为HTTP.serve("0.0.0.0", PORT),确保服务器监听容器的所有网络接口。

  2. 移除硬编码的环境变量(可选但推荐)
    删除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)
  1. 重新构建并运行容器
docker build -t test-julia .
docker run -it --rm -p 8080:8080 test-julia

此时再用curl 127.0.0.1:8080即可正常返回Hello。

内容的提问来源于stack exchange,提问作者xiaodai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 02:47:33