Я запускаю проект django в контейнере Docker. У меня есть сервер sftp, работающий в другом контейнере, и я хочу подключиться к нему из веб-контейнера. Используя библиотеку python paramiko из оболочки, я могу вручную ввести sftp в контейнер, найдя IP-адрес сервера с помощью docker inspect.
Я хочу сохранить sftp url в файле settings.py
и ссылаться на него позже, когда это необходимо.
В настоящее время мой файл docker-compose имеет изображение sftp:
sftp:
image: atmoz/sftp
container_name: sftp
volumes:
- /host/upload:/home/
ports:
- "22:22"
command:
- foo:pass:::upload
И веб-контейнер имеет следующие переменные среды:
environment:
SFTP_USERNAME: foo
SFTP_PASSWORD: pass
SFTP_HOSTNAME: sftp
SFTP_PORT: 20
Затем в settings.py я построил URL следующим образом:
SFTP_URL = 'sftp://' + SFTP_USERNAME + ':' + SFTP_PASSWORD + '@' + SFTP_HOSTNAME + ':' + SFTP_PORT + '/'
это используется в tasks.py
на данный момент в простой функции, в основном просто для создания sftp-соединения
def sftp():
transport = paramiko.Transport((settings.SFTP_URL, int(settings.SFTP_PORT)))
transport.connect(username = settings.SFTP_USERNAME, password = settings.SFTP_PASSWORD)
sftp = paramiko.SFTPClient.from_transport(transport)
return sftp
Однако вместо подключения выдается следующее сообщение об ошибке:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/opt/django/CustomerData/tasks.py", line 34, in sftp
transport = paramiko.Transport((settings.SFTP_URL, int(settings.SFTP_PORT)))
File "/opt/venv/lib/python3.5/site-packages/paramiko/transport.py", line 357, in __init__
hostname, port, socket.AF_UNSPEC, socket.SOCK_STREAM
File "/usr/lib/python3.5/socket.py", line 732, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known```