gpt4 book ai didi

Docker无法访问容器外的端口

转载 作者:行者123 更新时间:2023-12-02 18:08:05 24 4
gpt4 key购买 nike

我正在使用端口 2181 在我的本地主机上运行 zookeeper(不是通过 docker)。

另外,尝试通过 docker compose 运行 docker 镜像,如下所示。

#
# Mesos
#
mesos-master:
image: mesosphere/mesos-master:1.0.3
restart: always
privileged: true
network_mode: host
volumes:
- ~/mesos-data/master:/tmp/mesos
environment:
MESOS_CLUSTER: "mesos-cluster"
MESOS_QUORUM: "1"
MESOS_ZK: "zk://localhost:2181/mesos"
MESOS_PORT: 5000
MESOS_REGISTRY_FETCH_TIMEOUT: "2mins"
MESOS_EXECUTOR_REGISTRATION_TIMEOUT: "2mins"
MESOS_LOGGING_LEVEL: INFO
MESOS_INITIALIZE_DRIVER_LOGGING: "false"

Zookeepr 正在监听 2181 端口,但我的 docker 进程仍然无法连接到 zookeeper 端口 2181。

有什么遗漏吗?

谢谢

最佳答案

您从 docker 容器内指向 localhost。这意味着您的 docker 容器会尝试在该特定端口上连接到容器本身(本地主机),而不是在服务器的本地主机上。您需要指定要连接的特定 IP,或者您可以使用 --net="host" 选项运行 docker 容器。

$ docker run -d --net="host" ...

这将在主机网络内而不是在默认桥接网络内创建您的容器。

示例:我创建了一个 apache 容器(默认)并在主机的 127.0.0.1:80 上映射端口。所以在我的服务器上我可以 curl 127.0.0.1:80.

$ docker run -d -p 80:80 httpd

curl 127.0.0.1:80 来自主机作品:

$ curl localhost:80
<html><body><h1>It works!</h1></body></html>

如果我启动一个安装了 curl 的帮助容器,我将在其中 curl 127.0.0.1:80:

    $ docker run --rm tutum/curl /bin/bash -c 'curl 127.0.0.1:80'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (7) Failed to connect to 127.0.0.1 port 80: Connection refused

连接被拒绝,因为容器在默认的桥接网络中,并试图在端口 80 上 curl 自己。

现在我在 host 网络中启动容器:

$ docker run --net=host --rm tutum/curl /bin/bash -c 'curl 127.0.0.1:80'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 45 100 45 0 0 8573 0 --:--:-- --:--:-- --:--:-- 22500
<html><body><h1>It works!</h1></body></html>

--net=host 翻译成你的 docker-compose 文件意味着你必须添加 network_mode: host

关于Docker无法访问容器外的端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45728075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com