Не могу получить доступ к контейнеру Docker GCP

Вопрос или проблема

услуги:
  demoapi:
    имя_контейнера: demoapi
    изображение: demoapi:latest
    тома:
      - ./demoapi:/app/demoapi
    окружение:
      - TZ=Asia/Taipei
    порты:
      - "8090:8090"
  demoDB:
    изображение: mcr.microsoft.com/mssql/server:2022-latest
    имя_контейнера: demoDB
    пользователь: root  
    сети:
      - demonetwork
    порты:
      - "1433:1433"
    окружение:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=P@ssword
      - TZ=Asia/Taipei
    тома:
      - /mnt/c/dbdata:/var/opt/mssql/data
      # - C:/dbdata:/var/opt/mssql/data
    развертывание:
      ресурсы:
        ограничения:
          память: 2GB
сети:
  demonetwork:
    драйвер: bridge

Я использую этот файл docker-compose.yml для развертывания на виртуальной машине GCP.
Я создал две правила брандмауэра VPC для TCP 1443 и 8090, фильтры назначения IP-диапазонов установлены на внешний IP виртуальной машины.
Применимые к экземплярам в правилах брандмауэра содержат экземпляр виртуальной машины.

Оба внешних IP, 1443 и 8090 не могут подключиться.
В ssh виртуальной машины оба контейнера в состоянии работы.

Как я могу это исправить?

Я ожидаю подключение к внешнему IP на частичном порту.

Ответ или решение

Ваша проблема с доступом к контейнерам Docker в Google Cloud Platform (GCP) может быть вызвана несколькими факторами, включая ошибки в настройке сети, параметры брандмауэра или даже конфигурацию Docker. Давайте рассмотрим возможные шаги для диагностики и исправления вашей ситуации.

1. Проверка конфигурации Docker Compose

Ваш файл docker-compose.yml выглядит правильно, однако важно убедиться в том, что контейнеры действительно запущены и настроены на прослушивание нужных портов. Добавьте следующие команды в SSH:

docker ps

Убедитесь, что оба контейнера (demoapi и demoDB) находятся в статусе "Up" и что они прослушивают нужные порты. Важно также проверить, что контейнер demoapi действительно слушает на порту 8090, а контейнер demoDB — на 1433.

2. Настройка правил брандмауэра

Вы упомянули, что создали правила брандмауэра для TCP-портов 1443 и 8090. Однако обратите внимание, что в вашем конфигурационном файле в docker-compose.yml указан порт 1433 для demoDB, а не 1443. Убедитесь, что вы правильно открыли все необходимые порты. Вам нужно создать правила брандмауэра для:

  • TCP 8090 (для demoapi)
  • TCP 1433 (для demoDB)

Проверьте, что правила брандмауэра настроены для разрешения входящего трафика. Для этого выполните следующие шаги:

  1. Перейдите в консоль GCP.
  2. Найдите раздел "Network services" -> "VPC Network" -> "Firewall rules".
  3. Выберите ваши правила и убедитесь, что у них правильно указаны:
    • Targets: ваш экземпляр VM.
    • Source IP ranges: IP-адрес, с которого вы пытаетесь подключиться (или 0.0.0.0/0 для всех).
    • Protocols and ports: убедитесь, что tcp:8090 и tcp:1433 разрешены.

3. Проверка сетевых соединений

Убедитесь, что у вас есть доступ к веб-приложению на 8090 и к базе данных на 1433 из вашего локального компьютера. Для этого вы можете использовать утилиты, такие как curl или telnet:

curl http://<ваш_внешний_ip>:8090
telnet <ваш_внешний_ip> 1433

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

4. Логи контейнеров

Если предыдущие шаги не помогли, просмотрите логи вашего контейнера с помощью следующей команды:

docker logs demoapi
docker logs demoDB

Проверьте на предмет ошибок или других сообщений, которые могут помочь выявить проблему.

5. Сетевые настройки на вашей виртуальной машине

Проверьте настройки сети самой виртуальной машины. Убедитесь, что сам VM имеет доступ к интернету и правильно настроен для обработки входящих соединений.

6. Дополнительные проверки

Если после всех вышеупомянутых шагов проблема сохраняется, рассмотрите возможность:

  • Обновления Docker и Docker Compose.
  • Проверки версии образов, которые вы используете (возможно, стоит попробовать более старую или более новую версию).
  • Выполнения команды docker-compose down и последующего docker-compose up -d для перезагрузки контейнеров.

Заключение

Следуя вышеизложенным шагам, вы сможете диагностировать и, возможно, устранить проблему с доступом к вашим контейнерам Docker на GCP. Если проблема не решена, рассмотрите возможность обращения в поддержку GCP для получения более детальной помощи.

Оцените материал
Добавить комментарий

Капча загружается...