期待

期待

我正在运行以下命令:

  • 金属
    • Ubuntu 18.04
      • 流浪汉
        • dockerprovider
          • gitlab dk

期待

我正在尝试curl localhost:3000联系 gitlab。

  • 当我从 vagrant box 中执行此操作时,它作品

    vagrant@549f682a30a4:~/gdk$ curl localhost:3000
    <html><body>You are being <a href="http://localhost:3000/users/sign_in">redirected</a>.</body></html>vagrant@549f682a30a4:~/gdk$
    

    我还看到了gdk tail

  • 当我从 ubuntu 执行此操作时,它不起作用

    gdkuser@mymachine:~/gitlab-development-kit$ curl localhost:3000 -v --trace -
    Warning: --trace overrides an earlier trace/verbose option
    == Info: Rebuilt URL to: localhost:3000/
    == Info:   Trying 127.0.0.1...
    == Info: TCP_NODELAY set
    == Info: Connected to localhost (127.0.0.1) port 3000 (#0)
    => Send header, 78 bytes (0x4e)
    0000: 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a GET / HTTP/1.1..
    0010: 48 6f 73 74 3a 20 6c 6f 63 61 6c 68 6f 73 74 3a Host: localhost:
    0020: 33 30 30 30 0d 0a 55 73 65 72 2d 41 67 65 6e 74 3000..User-Agent
    0030: 3a 20 63 75 72 6c 2f 37 2e 35 38 2e 30 0d 0a 41 : curl/7.58.0..A
    0040: 63 63 65 70 74 3a 20 2a 2f 2a 0d 0a 0d 0a       ccept: */*....
    == Info: Recv failure: Connection reset by peer
    == Info: stopped the pause stream!
    == Info: Closing connection 0
    curl: (56) Recv failure: Connection reset by peer
    

    我没有看到任何东西gdk tail

分析/调查

当我看到请求gdk tail来自 vagrant 内部时会收到,而来自主机时不会收到,我假设请求卡在了某个地方。我不确定请求要经过哪条路线。我尝试了以下方法来了解更多信息:

  • 转发端口

    • Vagrant文​​件112行的网络部分
      config.vm.network "forwarded_port", guest: 3000, host: 3000, auto_correct: true

    • 主机(Ubuntu):netstat -tulpn | grep 3000
      tcp6 0 0 :::3000 :::* LISTEN 6508/docker-proxy

    • Vagrant:netstat -tulpn | grep 3000
      tcp 0 0 127.0.0.1:3000 0.0.0.0:* LISTEN 12387/gitlab-workho
      再次,因为内部调用是,但外部调用不在,gdk tail我假设来自主机的请求永远不会到达 vagrant。

  • 码头工人 0.0.0.0:3000->3000/tcp,因此端口应该被转发,并且请求应该可以在docker中看到

    gdkuser@mymachine:~/gitlab-development-kit$ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES
    549f682a30a4        cb5d370c7aaf        "/bin/sh -c 'supervi…"   About an hour ago   Up About an hour    0.0.0.0:3000->3000/tcp, 127.0.0.1:2222->22/tcp   gitlab-development-kit_default_1592131487
    

    当连接到 docker 并在 Vagrant 或 Ubuntu 上执行 curl 时,我没有在 docker 容器中的运行信息列表中获得任何信息。

  • 虚拟盒

    • 我读过关于 virtualbox 5.2.xx 的问题,因为我运行的是 virtualbox 6.1.10,我认为这不适用于此。不过,我不知道如何验证 virtualbox 是否确实转发了端口。
      我也不太确定 VirtualBox 是否转发到 Docker,反之亦然。

您是否知道如何继续找出问题所在?非常感谢!

答案1

关注此问题https://gitlab.com/gitlab-org/gitlab-development-kit/-/issues/545

在容器上运行此命令:

sudo apt install net-tools redir
export EXTIF=`ifconfig eth0 | grep "inet " | awk -F'[: ]+' '{ print $3 }'`
redir $EXTIF:3000 127.0.0.1:3000

相关内容