Docker 和 Vagrant 连接

Krz*_*zak 7 networking curl vagrant docker docker-compose

我在本地设置了 2 个应用程序。一个 (app_v) 在 vagrant 上运行,我可以在浏览器上使用http://192.168.50.5:3000/访问它。

第二个 (app_d) 在 docker-compose 上运行,我可以在浏览器上使用http://192.168.50.6:3000/访问它 。

问题是,他们似乎没有完全看到对方。我通过 ssh 进入我的 app_v 流浪机器。我跑:

 ping on 192.168.50.6
Run Code Online (Sandbox Code Playgroud)

它有效。但是使用卷曲:

curl http://192.168.50.6:3000/
curl: (7) couldn't connect to host
Run Code Online (Sandbox Code Playgroud)

重要的是:大约 30 秒后出现错误。如果我将端口更改为错误的内容,例如 9999,则会立即显示错误。

其他要点:

  • 如果我 ssh 进入 docker app_d 结果是相同的 ping 192.168.50.5 和 curl http://192.168.50.5:3000/
  • 如果我从 app_v 或 app_d 外部运行相同的命令,ping 和 curl 都可以工作(这就是浏览器也可以工作的原因)。
  • 这两个应用程序都运行在centos67上,它们都是rails应用程序

app_v 的 Vagrantfile 网络部分:

  config.vm.network 'public_network', ip: '192.168.50.5'
  config.vm.network 'forwarded_port', guest: 3000, host: 8080
  config.vm.network 'forwarded_port', guest: 5432, host: 5434
Run Code Online (Sandbox Code Playgroud)

Docker 组合 app_d 的设置:

version: '2'

services:
  db:
    build: docker/database
    container_name: postgres
    networks:
      app_net:
        ipv4_address: 192.168.50.10
    ports:
      - "5436:5432"

  app:
    build: .
    container_name: app_d
    networks:
      app_net:
        ipv4_address: 192.168.50.6
    volumes:
      - .:/app
    ports:
      - "8086:3000"
      - "2226:22"
    links:
      - db

networks:
  app_net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 192.168.50.0/24
          gateway: 192.168.50.1
Run Code Online (Sandbox Code Playgroud)

你有什么想法为什么我不能连接它们吗?

编辑 我已经缩小了一点。如果我使用,它会按预期工作:

    config:
    - subnet: 172.20.0.0/16
      ip_range: 172.28.5.0/24
Run Code Online (Sandbox Code Playgroud)

和 172.20.128.3 作为 IP。我可以通过 curl 通过 172.20.128.3:3000 访问服务器。那么那个特定的 IP 或子网有什么问题呢?