将Docker容器连接到特定的网络接口(例如eth1)?

时间:2018-06-13 15:52:47

标签: docker network-programming

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

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

  1. 连接到主机上的设备(相机)
  2. 连接到特定网络接口(eth1)以发送数据
  3. 为了满足他们两者,我选择将容器作为超级服务给出的命令运行。 我的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不能使用群组模式)。当我启动swarm时,我使用docker swarm init --advertise-addr my:wlan:ip:addr --data-path-addr eth1。 我以为这会将我从我的容器发送的数据包通过eth1路由到目的地。

    但是,当我tcpdump -i eth1时,没有任何事情可以解决。它仍然经历wlan0

    为什么会这样,以及如何解决?

1 个答案:

答案 0 :(得分:0)

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

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

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