Eu finalmente entendi o problema. O problema é o descarregamento de TCP no contêiner docker. Quando eu fecho o descarregamento de tcp através deste comando:
ethtool -K eth6 tx off rx off
Tudo funciona bem.
Estou usando o vSwitch aberto (com DPDK) para comunicar minhas máquinas. Eu tenho 2 PC físicos. O Nginx está trabalhando em um deles e seu ip = 10.10.10.6 / 24. Abra o vSwitch e o Docker está trabalhando na outra máquina. Eu crio uma ponte através deste comando:
ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev
E eu adiciono uma porta à porta física através deste comando que está usando o driver DPDK e conectado à máquina Ngnix com um cabo:
ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0 \
type=dpdk options:dpdk-devargs=0000:05:00.1
E atribua um IP ao br0:
ifconfig br0 10.10.10.11 netmask 255.255.255.0 up
Depois disso, eu crio um contêiner usando minha imagem:
Dockerfile:
FROM ubuntu:latest
MAINTAINER Zekeriya Akgul
RUN apt-get update -y && \
apt-get upgrade -y && \
apt-get install -y apache2 iputils-ping iputils-tracepath iproute2 net-tools wget
EXPOSE 80 443 444
E execute o contêiner usando o seguinte comando:
docker run --rm -P -it --cap-add NET_ADMIN --name ubuntu1 zkryakgul/ubuntu /bin/bash
Depois disso, atribuo uma porta ao contêiner usando o seguinte comando:
ovs-docker add-port br0 eth1 ubuntu1 --ipaddress=10.10.10.12/24
Depois de todos esses passos, minha máquina nginx faz ping no container e no ping do contêiner nginx.
Mas quando tento wget 10.10.10.6:80
, o contêiner não pode se conectar. Mas por outro lado, minha máquina física (ip: 10.10.10.11) pode fazer. Quando eu executo o mesmo comando (wget), ele obtém a página 10.10.10.6:80.
O que estou fazendo de errado?