docker设置了端口映射,不能访问

本文详细记录了在Docker环境下,通过修改配置文件解决容器内服务无法被外部访问的问题,包括如何正确设置监听地址以确保宿主机与容器间的端口映射有效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#docker ps 查看, 所有端口都 做了映射,

CONTAINER ID        IMAGE                            COMMAND             CREATED             STATUS              PORTS                                                                                                                                                                                                                                                                                                    NAMES
764b158ba491        open-falcon-plus-02:v-daiyi-01   "/bin/bash"         2 days ago          Up 3 hours          0.0.0.0:4444->4444/tcp, 0.0.0.0:6030-6031->6030-6031/tcp, 0.0.0.0:6070-6071->6070-6071/tcp, 0.0.0.0:6080-6081->6080-6081/tcp, 0.0.0.0:8080-8081->8080-8081/tcp, 0.0.0.0:8433->8433/tcp, 0.0.0.0:9912->9912/tcp, 0.0.0.0:14444->14444/tcp, 0.0.0.0:16060->16060/tcp, 0.0.0.0:18433->18433/tcp, 8082/tcp   open-falcon-plus-daiyi-01

#但是查看日志
tail -40 /home/work/open-falcon/agent/logs/agent.log

test@ubuntu-10:/tmp/bak$ tail -40 /home/work/open-falcon/agent/logs/agent.log
2018/10/14 20:27:09 transfer.go:48: call Transfer.Update fail: &{{2 1} <nil> 10.0.10.103:8433 1s} dial tcp 10.0.10.103:8433: getsockopt: connection refused
2018/10/14 20:27:09 var.go:95: <= <Total=0, Invalid:0, Latency=0ms, Message:>
2018/10/14 20:27:09 rpc.go:41: dial 10.0.10.103:8433 fail: dial tcp 10.0.10.103:8433: getsockopt: connection refused
2018/10/14 20:27:11 rpc.go:41: dial 10.0.10.103:8433 fail: dial tcp 10.0.10.103:8433: getsockopt: connection refused
2018/10/14 20:27:15 rpc.go:41: dial 10.0.10.103:8433 fail: dial tcp 10.0.10.103:8433: getsockopt: connection refused
2018/10/14 20:27:23 rpc.go:41: dial 10.0.10.103:8433 fail: dial tcp 10.0.10.103:8433: getsockopt: connection refused
2018/10/14 20:27:23 transfer.go:48: call Transfer.Update fail: &{{0 0} <nil> 10.0.10.103:8433 1s} dial tcp 10.0.10.103:8433: getsockopt: connection refused
2018/10/14 20:27:23 var.go:95: <= <Total=0, Invalid:0, Latency=0ms, Message:>
2018/10/14 20:27:41 var.go:88: => <Total=92> <Endpoint:ubuntu, Metric:agent.alive, Type:GAUGE, Tags:, Step:60, Time:1539574061, Value:1>
2018/10/14 20:27:41 var.go:88: => <Total=5> <Endpoint:ubuntu, Metric:df.bytes.free.percent, Type:GAUGE, Tags:mount=/,fstype=ext4, Step:60, Time:1539574061, Value:67.01861018345224>

但是无法访问
原因: docker里面的host不能配置127.0.0.1 或者192.168.0.1 或则宿主机器将无法访问端口

修改配置文件—(涉及到的,需要外部访问的都需要修改)

[root@ubuntu-10 open-falcon]# vim transfer/config/cfg.json
{
    "debug": true,
    "minStep": 30,
    "http": {
        "enabled": true,
        "listen": "0.0.0.0:6060"
    },
    "rpc": {
        "enabled": true,
        "listen": "0.0.0.0:8433"  **#此处监听外面8433. 改成0.0.0.0**
    },
    "socket": {
        "enabled": true,
        "listen": "0.0.0.0:4444",
        "timeout": 3600
    },
    "judge": {
        "enabled": true,
        "batch": 200,
        "connTimeout": 1000,
        "callTimeout": 5000,
        "maxConns": 32,
        "maxIdle": 32,
        "replicas": 500,
        "cluster": {
            "judge-00" : "127.0.0.1:6080"
        }
    },
    "graph": {
        "enabled": true,
        "batch": 200,
        "connTimeout": 1000,
        "callTimeout": 5000,
        "maxConns": 32,
        "maxIdle": 32,
        "replicas": 500,
        "cluster": {
            "graph-00" : "127.0.0.1:6070"

        }
    },
    "tsdb": {
        "enabled": false,
        "batch": 200,
        "connTimeout": 1000,
        "callTimeout": 5000,
        "maxConns": 32,
        "maxIdle": 32,
        "retry": 3,
        "address": "127.0.0.1:8088"
    }

修改好之后重启 docker里的服务,
[root@ubuntu-10 open-falcon]# ./open-falcon restart transfer

再次查看日志,

test@ubuntu-10:/tmp/bak$ tail -40 /home/work/open-falcon/agent/logs/agent.log 
2018/10/15 02:52:48 var.go:88: => <Total=1> <Endpoint:test-endpoint, Metric:test-metric-97, Type:GAUGE, Tags:idc=lgi-test,loc=beijing-test, Step:20, Time:1539597168, Value:33>
2018/10/15 02:52:48 var.go:95: <= <Total=1, Invalid:0, Latency=0ms, Message:ok>
2018/10/15 02:52:48 var.go:88: => <Total=1> <Endpoint:test-endpoint, Metric:test-metric-97, Type:GAUGE, Tags:idc=lgi-test,loc=beijing-test, Step:20, Time:1539597168, Value:33>
2018/10/15 02:52:48 var.go:95: <= <Total=1, Invalid:0, Latency=0ms, Message:ok>
2018/10/15 02:52:48 var.go:88: => <Total=1> <Endpoint:test-endpoint, Metric:test-metric-97, Type:GAUGE, Tags:idc=lgi-test,loc=beijing-test, Step:20, Time:1539597168, Value:33>
2018/10/15 02:52:48 var.go:95: <= <Total=1, Invalid:0, Latency=0ms, Message:ok>  #连接成功,数据传入。

查看端口的连接性

test@ubuntu-10:/tmp/bak$ telnet 10.0.10.103 8433
Trying 10.0.10.103...
Connected to 10.0.10.103.
Escape character is '^]'.      #这就是ok的

能连接成功,

### 配置Docker中的端口映射Docker中配置端口映射允许容器内的应用程序通过主机上的特定端口访问外部网络。这通常用于开发环境或部署服务时,使得运行于容器内部的服务可以被外界访问。 当创建并启动一个新的容器实例时,可以通过`docker run`命令加上参数来完成端口映射操作。具体来说: 对于简单的场景,只需要使用 `-p` 或 `--publish` 参数即可实现基本的端口转发功能[^1]。例如,假设有一个Web应用正在监听8080端口,则可以在启动容器的时候这样设置端口映射: ```bash $ docker run -d -p 80:8080 my_web_app_image ``` 上述命令表示将宿主机的80端口映射到容器内进程所使用的8080端口上。这里需要注意的是,默认情况下这种映射是对所有可用接口开放的;如果希望限定只对某个具体的IP地址有效的话,还可以进一步指定如下形式: ```bash $ docker run -d -p 127.0.0.1:80:8080 my_web_app_image ``` 此外,在某些复杂的应用环境中可能涉及到多个端口的同时映射需求,此时只需重复使用-p选项多次即可满足要求。比如下面的例子展示了如何同时暴露两个不同端口给外部世界: ```bash $ docker run -d -p 80:8080 -p 443:8443 my_secure_web_app_image ``` 值得注意的是,除了直接利用`docker run`指令外,也可以借助其他工具如Compose文件定义更复杂的多服务架构下的端口分配策略[^2]。 最后提醒一点,为了确保安全性和性能考虑,在实际生产环境中应当谨慎规划对外开放的具体端口号以及对应的协议类型等细节信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值