Задать вопрос
  • Не резолвится доменное имя в контейнере Docker, как можно решить проблему?

    @Clubber_77 Автор вопроса
    На данный момент для меня остается не ясна причина, по которой Docker игнорирует внешний DNS, и как это исправить. Но я нашел решение для DroneCI, которое позволяет мне на данный момент решить текущую задачу.

    1. Все контейнеры должны быть подключены к одной сети, в моем случае это одна внешняя сеть
    2. Узнать ip адрес unbound внутри сети docker, и указать его для всех сервисов, как DNS
    3. Для drone-runner установить переменную среды DRONE_RUNNER_NETWORKS, указывающую на вашу внешнюю сеть. Это предоставит возможность воркерам работать внутри вашей сети.
    4. Устанавливать в пайплайнах адрес dns, чтобы можно было локальные имена резолвились внутри кнтейнера
    5. Отключить операцию clone, которая по умолчанию включена в каждом пайплайне, и отвечает за скачивание репозитория в DroneCI. Потому что установить IP адрес DNS, для этой операции нельзя.

    kind: pipeline
    type: docker
    name: default
    
    clone:
      disable: true  
    
    steps:
      - name: check-dns
        image: ubuntu:20.04  
        dns:
          - 172.22.0.3
        commands:
          - apt-get update && apt-get install -y dnsutils iputils-ping  
          - set -e  
          - echo "Проверка доступности DNS-сервера"
          - ping -c 4 172.16.5.69 || { echo "Ping failed for 172.16.5.69"; exit 1; }  
          - ping -c 4 172.22.0.3 || { echo "Ping failed for 172.22.0.3"; exit 1; }  
          - echo "Проверка разрешения имени через DNS"
          - nslookup gitea.example.lan || { echo "nslookup failed"; exit 1; }  
          - dig @172.22.0.3 gitea.example.lan || { echo "dig failed"; exit 1; }  
          - nslookup gitea.example.lan 172.22.0.3 || { echo "nslookup with DNS failed"; exit 1; }


    Дополнение:

    Чтобы починить Gitea Actions необходимо:
    1. Раннеру добавить переменную окружения ACT_RUNNER_DOCKER_NETWORK, указывающую, на вашу внешнюю сеть. Это позволит запускать воркеры, как и в случае с DroneCI, в той же сети, в которой у вас настроен DNS.
    2. Установить контейнеру опцию --dns

    name: DNS Check Workflow
    run-name: ${{ gitea.actor }} is running the DNS Check workflow 
    permissions:
      actions: read
      checks: read
      pull-requests: read
      contents: read
      packages: read
    on: [push]
    
    jobs:
      Check-DNS:
        runs-on: ubuntu-latest
        container:
          image: ubuntu:latest
          options: --dns 172.22.0.3
    
        steps:
          - name: Install tools
            run: |
              echo " Installing tools"
              apt-get update
              apt-get install -y dnsutils iputils-ping curl git
              echo "✅ Installation completed: dnsutils, iputils-ping, curl"          
    
          - name: Install Node.js
            run: |
              echo " Installing Node"
              curl -fsSL https://deb.nodesource.com/setup_16.x | bash -
              apt-get install -y nodejs || { echo "❌ Node.js installation failed"; exit 1; }
              node --version
              echo "✅ Installation completed: nodejs"          
    
          - name: Check DNS Server Accessibility
            run: |
              echo " Checking DNS server accessibility"
              ping -c 4 172.16.5.69 || { echo "❌ Ping failed for 172.16.5.69"; exit 1; }
              ping -c 4 172.22.0.3 || { echo "❌ Ping failed for 172.22.0.3"; exit 1; }          
    
          - name: Test DNS Resolution
            run: |
              echo " Testing DNS resolution"
              nslookup gitea.oogis.lan || { echo "❌ nslookup failed"; exit 1; }
              dig @172.22.0.3 gitea.oogis.lan || { echo "❌ dig failed"; exit 1; }
              nslookup gitea.oogis.lan 172.22.0.3 || { echo "❌ nslookup with specified DNS failed"; exit 1; }          
    
          - run: echo " The job was automatically triggered by a ${{ gitea.event_name }} event."
          - run: echo " This job is now running on a ${{ runner.os }} server hosted by Gitea!"
          - run: echo " The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
          - name: Check out repository code
            uses: actions/checkout@v4
            with:
              token: ${{ secrets.GITEA_TOKEN }}
          - run: echo " The ${{ gitea.repository }} repository has been cloned to the runner."
          - run: echo "️ The workflow is now ready to test your code on the runner."
          - name: List files in the repository
            run: |
              ls ${{ gitea.workspace }}          
          - run: echo " This job's status is ${{ job.status }}."
    Ответ написан
    Комментировать
  • Как правильно написать обобщенный метод?

    @Clubber_77 Автор вопроса
    Решение найдено. Спасибо всем неравнодушным.

    Сам класс
    public class Answer<T> {
        private Info info;
        private T[] results;
    }


    и обобщенный метод, который должен вернуть объект этого класса
    public <T> Answer<T> requestAll(String endpoint, Class<T> tClass){
            String jsonObject = restClient.get()
                    .uri(endpoint)
                    .retrieve()
                    .body(String.class);
            Type type = TypeToken.getParameterized(Answer.class,  tClass).getType();
            return new Gson().fromJson(jsonObject, type);
        }
    Ответ написан
    Комментировать
  • Пропадает доступ в сеть при подключении ip камеры в Ethernet порт?

    @Clubber_77 Автор вопроса
    Спасибо огромное помогавшим людям, проблема решилась просто, - камеру нужно было поместить в другую подсеть.
    Ответ написан