Cliente FTP não está funcionando dentro do contêiner Docker

5

Estou tentando fazer com que meu aplicativo funcione corretamente no Docker, mas estou tendo problemas com ele.

O aplicativo se conecta a um servidor FTP remoto com o modo PASV e coloca um arquivo. Muito simples e funciona bem sem janela de encaixe. Nem o servidor FTP nem o cliente estão por trás de qualquer NAT; mas o cliente torna-se NAT porque estou usando o sistema de ponte Docker. (Usando a configuração de ponte padrão link )

Se eu olhar para tshark no servidor FTP ao executar o aplicativo cliente, ele troca muitos pacotes, por isso está "conectando-se" ao servidor, mas o aplicativo não está recebendo nada de volta. Isso me faz supor que, quando o servidor FTP tenta responder nessa porta empírica, ele não está sendo roteado de volta para o contêiner do Docker a partir do sistema operacional host.

Então, esperamos resumir, existe alguma maneira de ter essas portas pasvadas encaminhadas corretamente para a ponte docker? Restrição : Eu não tenho controle do servidor FTP em produção, então eu não posso simplesmente codificar uma lista de portas pasv para o iptables.

Obrigado por qualquer ideia!

    
por Iskar 02.11.2016 / 18:55

1 resposta

0

O PASV FTP funciona bem dentro de contêineres do Docker.

É mais difícil usar o Docker Swarm, mas é possível com uma única réplica ou implantar mode:global com o mapeamento de porta usando mode:host .

Como o modo PASV é stateful, as solicitações subseqüentes precisam ser roteadas para o mesmo nó no cluster.

Exemplo de pilha usando o modo host

services:
  ftp:
    image: vendor/vsftpd
    ports:
      - { target: 20,    published: 20, mode: host }
      - { target: 21,    published: 21, mode: host }
      - { target: 21100, published: 21100, mode: host }
      - { target: 21101, published: 21101, mode: host }
      - { target: 21102, published: 21102, mode: host }
    deploy:
      mode: global
    
por 04.10.2018 / 01:44