我一直在herehere以及整个Docker文档中。我想我需要用更简单的术语来解释这一点。

我的Docker容器需要能够做两件事:

  • 连接到主机上的设备(相机)
  • 连接到特定的网络接口(interface)(eth1)以发送数据

  • 为了满足这两个条件,我选择将容器作为 super 服务给出的命令来运行。
    我的docker-compose.yml看起来像这样:
    version: "3"
    services:
      superservice:
        image: docker
        command: docker run -it --device=/dev/vchiq my/image-to-run:latest
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
        deploy:
          replicas: 1
          mode: replicated
        stdin_open: true
        tty: true
    

    这样,我仍然可以将我的服务docker stack deploy到群中(否则,指定--device在群模式下不起作用)。当我启动集群时,我使用docker swarm init --advertise-addr my:wlan:ip:addr --data-path-addr eth1这样做。
    我以为这会将我从容器中发送的数据包通过eth1路由到目的地。

    但是,当我tcpdump -i eth1时,没有任何结果。一切仍在经历wlan0

    为什么会发生这种情况,以及如何解决?

    最佳答案

    我发现执行此操作的方法是使用简单的sudo route set default eth1。由于某种原因,我认为设置--data-path-addr=eth1也会设置我使用的网络接口(interface)。显然,事实并非如此。

    我没有花很多时间在网络上,尽管这是我要学习的,所以也许我将能够通过一些更复杂的路由以更好的解决方案来解决该问题。现在,当我想返回sudo route delete default eth1界面时,我只是wlan0

    现在对我来说这是一个好的解决方案,因为在部署计算机时,它仅使用eth1接口(interface)。

    关于docker - 将Docker容器连接到特定的网络接口(interface)(例如eth1)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50841450/

    10-16 10:52