Cannot assign requested address при попытке SMTP между Docker контейнерами
Есть несколько контейнеров, один из которых выступает в роли почтового сервера. Сервисы описаны в docker-compose.yml, для почтового используется docker.io/mailserver/docker-mailserver. Команда host позволяет увидеть адрес почтового сервера по его имени из каждого контейнера.
Однако, при попытке выполнить python код из любого контейнера, кроме почтового, возникает ошибка:
from smtplib import SMTP
smtp = SMTP(host='mailserver')
smtp.connect()
Стектрейс:
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.9/smtplib.py", line 339, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/local/lib/python3.9/smtplib.py", line 310, in _get_socket
return socket.create_connection((host, port), timeout,
File "/usr/local/lib/python3.9/socket.py", line 843, in create_connection
raise err
File "/usr/local/lib/python3.9/socket.py", line 831, in create_connection
sock.connect(sa)
OSError: [Errno 99] Cannot assign requested address
Содержание docker-compose.yml
version "3.7"
services:
consumer:
build: consumer/
shm_size: '15gb'
environment:
LISTENER_ADDR: http://client:8243
client:
build: producer/
volumes:
- domain-model-updates:/volume
ports:
- 8243:8243
mailserver:
image: docker.io/mailserver/docker-mailserver:latest
hostname: ${HOSTNAME}
domainname: ${DOMAINNAME}
container_name: ${CONTAINER_NAME}
env_file: ./mailserver/mailserver.env
ports:
- "25:25"
- "143:143"
- "587:587"
- "993:993"
volumes:
- maildata:/var/mail
- mailstate:/var/mail-state
- maillogs:/var/log/mail
- ./mailserver/config/:/tmp/docker-mailserver/${SELINUX_LABEL}
cap_add: [ "NET_ADMIN", "SYS_PTRACE" ]
volumes:
domain-model-updates:
external: true
maildata:
mailstate:
maillogs
Запускаю как docker-compose up
При этом netstat в контейнере (не почтовом) после ошибки показывает TCP соединение между к ip почтового контейнера по 25 порту в состоянии TIME_WAIT.