首页 > 解决方案 > 无法访问 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
                }
            }
        }

标签: dockeractix-web

解决方案


好的。弄清楚了。首先,命令行参数是 hostport:containerport 而不是相反。

其次,服务器只接受本地主机连接。看看actix怎么了。使用--network host参数进行调试的好方法docker run


推荐阅读