我有一个基于actix web的应用程序,我正在尝试将其容器化。当我在本地运行构建时,它运行得很好,但是当我通过docker构建它时,应用程序启动得很好,并绑定到本地docker端口,但无法从主机访问。
如何运行容器:
docker run -p 80:80 myapp
字符串
Dockerfile(abreviated):
[...] // 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
}
}
}
型
1条答案
按热度按时间nbysray51#
好吧我知道了首先,comand行参数是hostport:containerport,而不是相反。
其次,服务器只接受本地主机连接。会看到什么是与actix。调试的一个好方法是使用
--network host
参数和docker run