Se os contêineres não estiverem na mesma rede de estivadores , eles ganharão ' t ser capaz de se comunicar diretamente.
Os contêineres na rede padrão não podem se comunicar sem usar a antiga sintaxe --link
(atualmente, consulte isto ). Como os seus não estão vinculados (como você mencionou) e presumo que estão apenas na rede docker padrão, eles não poderão interagir diretamente.
O contêiner da Web deve conseguir se comunicar com o servidor SMTP por meio da porta 25 do host do docker, já que você configurou esse mapa entre o host e o contêiner SMTP. Ao usar o endereço público do host, seu contêiner da Web poderá se comunicar com o contêiner de SMTP.
Atualização:
Eu escrevi um caso de teste que funciona para mim, você poderia confirmar que isso não funciona em seu ambiente. Sinta-se à vontade para alterar as portas do servidor de 5000
para qualquer coisa que você deseje, certificando-se de substituir todas as instâncias. No cliente app.py, adicione seu IP no grande [YOUR PUBLIC IP]
bit. Você não precisa do python em sua máquina para testar isso - mas a imagem alpina é de apenas 80MB.
Servidor
app.py
from xmlrpc import server
serv = server.SimpleXMLRPCServer(('0.0.0.0', 5000))
def echo(word):
return "echo: {}".format(word)
serv.register_function(echo)
serv.serve_forever()
Dockerfile
FROM python:3-alpine
WORKDIR /app
COPY app.py .
EXPOSE 5000
ENTRYPOINT python app.py
Construa com docker build -t server:tobyd
Executar com docker run -d -p 5000:5000 server:tobyd
Cliente
app.py
from xmlrpc import client
proxy = client.ServerProxy('http://[YOUR PUBLIC IP]:5000')
for i in range(10):
print(proxy.echo('cats'))
Dockerfile
FROM python:3-alpine
WORKDIR /app
COPY app.py .
ENTRYPOINT python app.py
Construa com docker build -t client:tobyd
Executar com docker run -d --name client_tobyd client:tobyd
Expectativas
docker logs client_tobyd
deve ter cats
impresso 10 vezes.