账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    如何让远方客户端访问docker容器?
    22
    0

    如题

    首先我iptables -F清掉了所有的规则

    然后我用express-generator创建了一个项目test,进入里面创建了一个Dockerfile,为了方便我直接npm install了所有需要的包

    express test
    cd test
    npm install

    然后我直接把所有东西都放到容器里就不用安装一遍了……

    from node:latest
    workdir /app
    add . /app
    expose 3000
    cmd npm start

    之后构建了自己的镜像,运行

    docker build -t test0
    docker container run -d -p3000:3000 test0
    # 5380
    docker logs 5380
    # test@0.0.1 start /app
    # node ./bin/www
    docker container ls
    # 5380...     test0     "bin/sh -c..."          ...    0.0.0.0:3000:3000/tcp

    我自己curl了一下本地访问没问题

    curl http://172.17.0.2:3000
    # <!DOCTYPE....
    curl http://192.168.2.2:3000
    # <!DOCTYPE....

    按说就应该没问题可以运行了……

    但是我用同一局域网的其它机器(比如2.5或者2.7)访问就无法访问,而且我docker logs一查根本没有访问信息…………

    用docker之前我在本机npm start测试过其它机器直接访问没问题,我不明白为啥会这样了……求助!

    docker 内

    ip a

    1: lo: <LOOPBACK.....
    4: eth0@if5: <BROADCAST, MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    
        link/ether 02:42:ac:11:00:02    brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
            valid_lft forever preferred_lft forever

    ip r

    default via 172.17.0.1 dev eth0
    172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
    192.168.2.0/24 dev eno1 proto kernel scope link src 192.168.2.115
    192.168.2.254 dev eno1 proto shcp scope link src 192.168.2.115 metric 100

    docker container ls

    7c... mariadb "docker-entrypoint.s..." 12 days ago up 6 minutes 0.0.0.0:3306->3306/tcp

    Docker外的系统

    ip a

    eno1 直连192.168.2.0,与外网逻辑隔离,通过DHCP自动获得IP地址(不固定)
    
    docker0: <BROADCAST, MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    
        link/ether 02:42:ac:11:87:74    brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
            valid_lft forever preferred_lft forever
        inet 6 ................ scope link
            valid_lft forever preferred_lft forever

    ip r

    default via 192.168.2.254 dev eno1 proto dhcp src 192.168.2.127 metric 100
    172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
    192.168.2.0/24 dev eno1 proto kernel scope link src 192.168.2.115
    192.168.2.254 dev eno1 proto dhcp scope link src 192.168.2.127 metric 100
    0
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • 乌龟快饿死了 普通会员 1楼

      要让远方客户端访问Docker容器,您可以使用SSH(Secure Shell)连接。以下是一些步骤:

      1. 首先,确保您的客户端已经安装了SSH客户端。这可以在Windows、macOS和Linux上完成。

      2. 然后,将您的Docker容器的IP地址或主机名添加到SSH服务器的允许列表中。这可以通过在Docker容器中运行以下命令完成:

      docker run --allow-.flatMap-out http://[IP]:2222

      这将允许客户端从任何IP地址(包括远程服务器的IP地址)访问容器。

      1. 一旦SSH连接已经建立,客户端就可以使用SSH客户端来连接到Docker容器了。这通常可以在命令行中完成,例如:

      ssh [容器的IP地址] [用户名]@[主机名]

      这将连接到指定的Docker容器,并显示容器的默认欢迎消息和端口映射。

      注意:在远程访问Docker容器时,还需要确保客户端的网络设置允许SSH连接。这可以通过在客户端的防火墙规则中添加以下行来完成:

      Allow ssh from anywhere (port 22)

      这将允许客户端连接到容器的任何端口。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部