docker - 无法访问 docker port actix web build
问题描述
我有一个基于 actix web 的应用程序,我正在尝试将其容器化。当我在本地运行构建时它工作正常,但是当我通过 docker 构建它时,应用程序启动正常并绑定到本地 docker 端口,但无法从主机访问。
我如何运行容器:
docker run -p 80:80 myapp
Dockerfile(缩写):
[...] // Builds binaries
FROM debian:buster-slim
COPY --from=server-builder /usr/src/myapp/target/release/myapp /usr/bin
COPY --from=frontend-builder /usr/src/frontend/dist /static
EXPOSE 80
CMD ["myapp"]
我没有在端口 80 上运行任何其他服务,并且我尝试过使用不同的主机端口。我的二进制文件没有问题,因为它在本地运行良好,并且日志显示它在 docker 中运行良好。这不是 /static 目录的错误配置,因为服务器记录连接(即使在生产构建中)并且在 docker 中它没有到达服务器。
这是运行时的网络设置docker inspect
"NetworkSettings": {
"Bridge": "",
"SandboxID": "f7fe576d1f3c1612bb5afa94c3c360a12b0c0d464881835a0347fcadad228343",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "80"
},
{
"HostIp": "::",
"HostPort": "80"
}
]
},
"SandboxKey": "/var/run/docker/netns/f7fe576d1f3c",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "b5939e954990ef71f4b69929beaf9af8f0b28f7fa9ee32363a9aefdd2f49107b",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:03",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "3eefce33be199f43e6aaa5866606a9a2da0daf25e662b510a18ed1820fb4d1d9",
"EndpointID": "b5939e954990ef71f4b69929beaf9af8f0b28f7fa9ee32363a9aefdd2f49107b",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:03",
"DriverOpts": null
}
}
}
解决方案
好的。弄清楚了。首先,命令行参数是 hostport:containerport 而不是相反。
其次,服务器只接受本地主机连接。看看actix怎么了。使用--network host
参数进行调试的好方法docker run
推荐阅读
- reactjs - React 组件似乎因为子组件而重新渲染(但不应该)
- laravel - 照亮\数据库\查询异常 | SQLSTATE [42S21]:列已存在:1060 列名重复
- php - 当用户未登录无法看到页面 wordpress 时的功能
- vba - 按文件名查找形状图片
- python - 如何从python中的数据列中提取两个数字?
- c# - 在应该永远保持打开状态的 gRPC 流中返回新数据
- javascript - 不同时间启动功能
- python - grahql-ws 订阅 aiohttp:如何允许订阅?
- python - 当 Pandas 数据框中的列名重复时怎么办?
- r - 在 r 中生成信号组合及其输出的程序方式