как получить доступ к порту пользователя хоста в контейнере docker

#docker #reverse-proxy #centos8

Вопрос:

Я использую MEGACmd для запуска сервера wevdav на хосте на порту 4443. Я могу получить доступ к порту на хосте:

 $ curl 127.0.0.1:4443
<title>MEGA</title><head><meta charset="utf-8" /><style>...
 

В моем контейнере nextcloud я могу получить доступ к хосту:

 $ docker exec -ti nextcloud_NCFrontend_1 bash
root@fab88ddd175e:/var/www/html# curl 172.17.0.1
<html>
<head><title>503 Service Temporarily Unavailable</title></head>
<body>
<center><h1>503 Service Temporarily Unavailable</h1></center>
<hr><center>nginx</center>
</body>
</html>
 

но я не могу получить доступ к порту 4443

 root@fab88ddd175e:/var/www/html# curl 172.17.0.1:4443
curl: (7) Failed to connect to 172.17.0.1 port 4443: Connection refused
 

для отладки я отключил SELinux и брандмауэр и все еще не работаю

файл докера nextcloud

 version: "3.7"

services:

    NCDatabase:
        image: "mariadb:10.5.9"
        
        volumes:
            - "NCMariaDB:/var/lib/mysql"

        environment:
            - MYSQL_ROOT_PASSWORD
            - MYSQL_RANDOM_ROOT_PASSWORD
            - MYSQL_DATABASE
            - MYSQL_USER
            - MYSQL_PASSWORD

        restart: "on-failure"
        networks: ["common"]

    NCFrontend:
        image: "nextcloud:21.0.0"

        volumes: 
          - "NCData:/var/www/html"

        environment:
            - LETSENCRYPT_HOST
            - VIRTUAL_HOST
            - TRUSTED_PROXIES
            - OVERWRITEPROTOCOL
            - MYSQL_DATABASE
            - MYSQL_USER
            - MYSQL_PASSWORD
            - MYSQL_HOST
            - SMTP_HOST
            - SMTP_PORT
            - SMTP_NAME
            - SMTP_PASSWORD
            - MAIL_FROM_ADDRESS
            - NEXTCLOUD_TRUSTED_DOMAINS
            - NEXTCLOUD_ADMIN_USER
            - NEXTCLOUD_ADMIN_PASSWORD

        depends_on:
            - "NCDatabase"
        networks: ["net", "common"]
        restart: "always"

volumes:
    NCMariaDB:
    NCData:

networks:
    net:
        external: true
    common:
 

файл настройки обратного прокси-сервера

 version: "3.7"

services:

    reverse-proxy:
        image: "jwilder/nginx-proxy:latest"
        container_name: "reverse-proxy"
        volumes:
            - "html:/usr/share/nginx/html"
            - "dhparam:/etc/nginx/dhparam"
            - "vhost:/etc/nginx/vhost.d"
            - "certs:/etc/nginx/certs"
            - "/run/docker.sock:/tmp/docker.sock:ro"
        restart: "always"
        networks: 
            - "net"
        ports:
            - "80:80"
            - "443:443"

    letsencrypt:
        image: "jrcs/letsencrypt-nginx-proxy-companion:latest"
        container_name: "letsencrypt-helper"
        volumes:
            - "html:/usr/share/nginx/html"
            - "dhparam:/etc/nginx/dhparam"
            - "vhost:/etc/nginx/vhost.d"
            - "certs:/etc/nginx/certs"
            - "/run/docker.sock:/var/run/docker.sock:ro"
        environment:
            NGINX_PROXY_CONTAINER: "reverse-proxy"
            DEFAULT_EMAIL: "user@domain.com"
        restart: "always"
        depends_on:
            - "reverse-proxy"
        networks: 
            - "net"

volumes:
  certs:
  html:
  vhost:
  dhparam:

networks:
  net:
    external: true
 

Комментарии:

1. пожалуйста, поделитесь командой, которую вы используете для запуска этих контейнеров, или файлом создания блокировки

2. В 172.17.0.1 каких портах они открыты ? и этот ip-адрес для какого контейнера ?

3. 172.17.0.1-это IP — адрес хоста, так как брандмауэр отключен. я предполагаю, что все порты открыты