Подключение к внешнему ip с портом из django, развернутого на docker
У меня есть приложение django с mariadb, подключаемое к терминалу zk через библиотеку pyzk,
Приложение прекрасно работает в локальном режиме, но когда я развернул его с помощью docker, все функции работали нормально, пока не началось подключение к zk терминалу, я получил ошибку Exception: can't reach device (ping 41.32.196.3)
приложение будет работать в ubuntu и windows
zk терминал должен подключить py ip и порт (4370)
docker-compose.yaml
version: "3.9"
services:
db:
image: mariadb:10.5
restart: unless-stopped
command:
- --default-authentication-plugin=mysql_native_password
env_file:
- ./.env
ports:
- 3308:3306
container_name: "djanzk_db"
build:
context: ./mysql
dockerfile: Dockerfile
web:
build: .
container_name: "djanzk_web"
command: sh -c "python3 manage.py migrate --noinput && python3 manage.py collectstatic --noinput && python manage.py runserver 0.0.0.0:8040"
ports:
- "8040:8040"
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
- .:/app
- /tmp/app/mysqld:/run/mysqld
depends_on:
- db
env_file:
- ./.env
networks:
- default
#networks:
# outside:
# external: true
.env
# Django settings
SECRET_KEY=
DEBUG=True
DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 0.0.0.0 [::1]
# MySQL settings
MYSQL_DATABASE=djaznzk
MYSQL_USER=root
MARIADB_ROOT_PASSWORD=root
MYSQL_PASSWORD=root
MYSQL_PORT=3306
MYSQL_HOST=db
Dockerfile
FROM ubuntu:latest
LABEL authors="ibralsmn"
ENTRYPOINT ["top", "-b"]
# Use an official Python runtime as a parent image
FROM python:3.10
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Set the working directory
WORKDIR /app
# Install dependencies
COPY requirements.txt /app/
RUN pip install -r requirements.txt
# Copy the project code into the container
COPY . /ap
Раздел базы данных в setting.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': config('MYSQL_DATABASE','djaznzk'),
'USER': config('MYSQL_USER','root'),
'PASSWORD': config('MYSQL_PASSWORD','root'),
'PORT': config('MYSQL_PORT','3306'),
'HOST': config('MYSQL_HOST','127.0.0.1'),
}
}
view.py функция connect
def test_terminal(request, ip=None, port=None):
conn = None
zk = ZK(ip, port, timeout=5)
print(zk)
try:
conn = zk.connect()
conn.disable_device()
messages.info(request, f'{ip}:{port} Terminal Connection successful')
except Exception as e:
messages.error(request, f'{ip}:{port} Terminal {e}')
raise Exception(e)
finally:
if conn:
conn.disconnect()
return redirect('list_terminal')
Пробую отключить брандмауэр и изменить сетевые настройки в файле docker