Mac M1上Docker容器部署的Elixir Web服务器无法访问排查
问题原因与解决方法
核心问题
容器内的Elixir Web服务器监听的是127.0.0.1:4000,这个地址是容器内部的回环地址,只能在容器内部访问。宿主机(你的MacBook M1)的端口映射是把宿主机端口转发到容器的公共网络接口,而非回环地址,所以外部无法访问。
解决步骤
- 修改Elixir服务的监听地址为
0.0.0.0,让服务监听容器所有可用的网络接口:- 若使用Phoenix框架:找到对应环境的配置文件(比如
config/dev.exs或config/prod.exs),修改http配置的ip字段:config :your_app, YourAppWeb.Endpoint, http: [ip: {0, 0, 0, 0}, port: 4000], # 保留其他原有配置 - 若为自定义Elixir服务器(比如用Plug.Cowboy):启动时指定监听IP为
0.0.0.0:Plug.Cowboy.http YourRouter, [], ip: {0, 0, 0, 0}, port: 4000
- 若使用Phoenix框架:找到对应环境的配置文件(比如
- 重新构建并启动容器:
docker-compose down && docker-compose up --build - 验证:查看容器日志,确认服务监听地址变为
0.0.0.0:4000,再执行curl localhost:4000测试,即可正常获取响应。
内容的提问来源于stack exchange,提问作者Zoey
相关产品推荐
相关产品推荐

