Ответы пользователя по тегу Docker
  • Почему не запускается Docker на гостевом аккаунте Windows?

    @dronmaxman
    VoIP Administrator
    https://docs.docker.com/desktop/install/windows-in...

    If your administrator account is different to your user account, you must add the user to the docker-users group:

    Run Computer Management as an administrator.
    Navigate to Local Users and Groups > Groups > docker-users.
    Right-click to add the user to the group.
    Sign out and sign back in for the changes to take effect.
    Ответ написан
    5 комментариев
  • Я добавил правило в DOCKER-USER которое дает доступ к портам только 1 айпи, но теперь из контейнеров нельзя выйти в интернет. Как поправить?

    @dronmaxman
    VoIP Administrator
    sudo iptables -I DOCKER-USER -i ens3 ! -s IP/24 -j DROP

    Дава расшифруем что ты написа: блокировать ВСЕ что зашло через интерфейс ens3 кроме одной подсети. В результате твои контейнеры отправляют запросы, а ответы блокируются этим правилом.

    Надо указать порт, пример для web сервера
    sudo iptables -I DOCKER-USER -i ens3  ! -s IP/24 -p tcp -m tcp --dport 80 -j DROP
    Ответ написан
    5 комментариев
  • Почему сервис не запускается в контейнере докер?

    @dronmaxman
    VoIP Administrator
    main_queue:
        build:
          context: .
          dockerfile: Dockerfile
        command: 'php artisan queue:work'
        depends_on:
          - main_db 
        networks:
          - mm-network
        environment:
          - DB_CONNECTION=${DB_CONNECTION}
          - DB_HOST=${DB_HOST}
          - DB_PORT=${DB_PORT}
          - DB_DATABASE=${DB_DATABASE}
          - DB_USERNAME=${DB_USERNAME}
          - DB_PASSWORD=${DB_PASSWORD}


    или

    main_queue:
        build:
          context: .
          dockerfile: Dockerfile
        command: 'php artisan queue:work'
        depends_on:
          - main_db 
        networks:
          - mm-network
        env_file:
          - .env
    Ответ написан
  • Стоит ли менять Docker на Proxmox?

    @dronmaxman
    VoIP Administrator
    Для твоей текущей конфигурации proxmox добави пару плюсов в виде снимков, клонирование, бекап на уровне всей виртуальной машинки, возможность запускать windows. При правильном подборе железа можно пробросить GPU или еще какой-то девайс и попробовать какой-то изврат. В целом это хороший опыт.
    Ответ написан
    Комментировать
  • Проект на Vue3 в Docker. Как получить данные из примонтированной директории?

    @dronmaxman
    VoIP Administrator
    Именованая шара решит проблему.
    Как в docker сохранить данные имеющиеся в контейнере?

    Чаще всего такое происходит из-за нехватки прав, изменить права на src=/path/to/external/public, в соответствии с правами процесса который запускается в контейнере.
    Ответ написан
    Комментировать
  • Как пробразовать набор команд Docker CLI в файл YAML для Docker Compose?

    @dronmaxman
    VoIP Administrator
    ChatGPT, просто скопировал твой вопрос ему

    version: '3.7'
    
    networks:
      zabbix-net:
        driver: bridge
        ipam:
          config:
            - subnet: 172.20.0.0/16
              ip_range: 172.20.240.0/20
    
    services:
      postgres-server:
        image: postgres:latest
        container_name: postgres-server
        environment:
          POSTGRES_USER: "zabbix"
          POSTGRES_PASSWORD: "zabbix_pwd"
          POSTGRES_DB: "zabbix"
        networks:
          zabbix-net:
        restart: unless-stopped
    
      zabbix-snmptraps:
        image: zabbix/zabbix-snmptraps:alpine-7.0-latest
        container_name: zabbix-snmptraps
        volumes:
          - /zbx_instance/snmptraps:/var/lib/zabbix/snmptraps:rw
          - /var/lib/zabbix/mibs:/usr/share/snmp/mibs:ro
        networks:
          zabbix-net:
        ports:
          - "162:1162/udp"
        restart: unless-stopped
    
      zabbix-server-pgsql:
        image: zabbix/zabbix-server-pgsql:alpine-7.0-latest
        container_name: zabbix-server-pgsql
        environment:
          DB_SERVER_HOST: "postgres-server"
          POSTGRES_USER: "zabbix"
          POSTGRES_PASSWORD: "zabbix_pwd"
          POSTGRES_DB: "zabbix"
          ZBX_ENABLE_SNMP_TRAPS: "true"
        networks:
          zabbix-net:
        ports:
          - "10051:10051"
        volumes:
          - zabbix-snmptraps:/var/lib/zabbix/snmptraps:rw
        restart: unless-stopped
    
      zabbix-web-nginx-pgsql:
        image: zabbix/zabbix-web-nginx-pgsql:alpine-7.0-latest
        container_name: zabbix-web-nginx-pgsql
        environment:
          ZBX_SERVER_HOST: "zabbix-server-pgsql"
          DB_SERVER_HOST: "postgres-server"
          POSTGRES_USER: "zabbix"
          POSTGRES_PASSWORD: "zabbix_pwd"
          POSTGRES_DB: "zabbix"
        networks:
          zabbix-net:
        ports:
          - "443:8443"
          - "80:8080"
        volumes:
          - /etc/ssl/nginx:/etc/ssl/nginx:ro
        restart: unless-stopped
    
      pgadmin:
        image: dpage/pgadmin4
        container_name: pgadmin
        environment:
          PGADMIN_DEFAULT_EMAIL: "user@domain.com"
          PGADMIN_DEFAULT_PASSWORD: "SuperSecret"
        networks:
          zabbix-net:
        ports:
          - "8083:80"
        restart: unless-stopped
    
    volumes:
      zabbix-snmptraps:
    Ответ написан
    Комментировать
  • Как в docker сохранить данные имеющиеся в контейнере?

    @dronmaxman
    VoIP Administrator
    Есть два подхода, использовать внутренний volumes

    version: '3.6'
    services:
      smtp:
        image: exim4:v1
        container_name: smtp
        ports:
          - 2025:25
        volumes:
          - exim4_config:/etc/exim4
          - exim4_mail:/var/mail
          - exim4_logs:/var/log/exim
        restart: unless-stopped
        networks:
          - localnet
    
    
    volumes:
      exim4_config:
      exim4_mail:
      exim4_logs:


    или запустить контейнер руками и сгенерировать конфиг, и пользоваться твои compose

    docker run -it --rm \
      -v /opt/exim4/smtpsender04/config:/etc/exim4 \
      -v /opt/exim4/smtpsender04/mail:/var/mail ʼ
      exim4:v1 /bin/bash -c "exim -bP >/etc/exim4/exim.conf"
    Ответ написан
    3 комментария
  • Какие настройки необходимы для маршрутизации подключения с хостовой машины в VPN docker?

    @dronmaxman
    VoIP Administrator
    Запусти контейнер как --net=host, включи маскарад на интерфейсе VPN и жизнь станет проще.
    Ответ написан
    Комментировать
  • Как настроить Docker, чтобы composer создавал папку vendor?

    @dronmaxman
    VoIP Administrator
    volumes:
    - .:/var/www/html/git


    Этой командой ты перетираеш содержимое /var/www/html/git. Это ужастная практика делать именно вот так "- .:/" без указания каталога источника.

    Хороший пример https://github.com/codefresh-contrib/php-composer-...
    Ответ написан
    1 комментарий
  • Как организовать создание отдельного контейнера с сайтом для нового пользователя?

    @dronmaxman
    VoIP Administrator
    Ты хочеш функционал почти как у облачного провайдера.

    Нужно, чтобы при регистрации на главном сайте создавался новый контейнер

    Вариантов выше крышы, docker swarm, kubernets, просто виртуалки. Где угодно можна создавать машины, но все это стоит разных денег.

    Есть amazone, есть еще куча облачных провайдеров, есть решения на земле, у всего есть API (90% что есть), подключайся со своего ГЛАВНОГО сайта через API, создавай машинки из подготовленного шаблока и отправляй пользователю письмом данные для подключения.

    Выбирай сервис по деньгам, изучи его API, реализуй методы для решения свой задачи и вперед в светлое будущее)
    Ответ написан
    Комментировать
  • Настройка docker и proxy для возможноси отправки запроса через curl между контейнерами. Возможно ли это?

    @dronmaxman
    VoIP Administrator
    Часто эту задачу решают через external network.

    Создаеш еще одну сеть через CLI
    docker create network net-private

    Потом добавляеш ее в docker-compose.yml как внешнюю, потом в томже компопозе добавляеш ее к сервису которые должны между собой взаимодействовать.

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

    Вот пример двух композов, приложение с базой и pgadmin. Pgadmin это вебка для управления базой, что бы они могли взаимодействовать мы объединяем их в одну сеть net-private.
    version: '3.8'
    
    services:
      pgadmin:
        image: dpage/pgadmin4
        restart: unless-stopped
        environment:
          PGADMIN_DEFAULT_EMAIL: "admin@example.com"  # замініть на свою email-адресу
          PGADMIN_DEFAULT_PASSWORD: "qwerty12345"  # замініть на свій пароль
        ports:
          - "5050:80"
        networks:
          - net-private
    
    networks:
      net-private:
        external: true


    version: '3.8'
    
    services:
      web:
        image: my/app
        restart: unless-stopped
        ports:
          - "80:80"
        volumes:
            - ./data:/mnt/data
      database:
        image: db/psql
        restart: unless-stopped
        networks:
          - net-private
    
    
    networks:
       net-private:
        external: true
    Ответ написан
    Комментировать
  • Какой docker compose использовать и почему их два?

    @dronmaxman
    VoIP Administrator
    docker compose - новая версия
    docker-compose - больше не развивается, поддерживает для совместимости
    Ответ написан
    1 комментарий
  • Как обновлять сертификаты в Docker Compose для Nginx с автоматическим перезапуском контейнера?

    @dronmaxman
    VoIP Administrator
    nginx:
      container_name: nginx_container
      image: nginx
      ports:
        - 80:80
        - 443:443
      networks:
        - private
        - public
      restart: always
      volumes:
        - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
        - ./nginx/conf.d/:/etc/nginx/conf.d/:ro
        - ./certbot/www:/var/www/certbot/:ro
        - ./certbot/conf/:/etc/nginx/ssl/:ro
      command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
    
    certbot:
      image: certbot/certbot
      volumes:
        - ./certbot/www/:/var/www/certbot/:rw
        - ./certbot/conf/:/etc/letsencrypt/:rw
      entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
    Ответ написан
    6 комментариев
  • Как решить ошибку MaxListenersExceededWarning в Докере во время RUN npm install?

    @dronmaxman
    VoIP Administrator
    memory leak

    Вполне однозначно написано, что не хватает RAM.

    Собери у себя, запуш на docker hub подтом подтяни на VPS.
    Ответ написан
  • Как подключить Django к MongoDB?

    @dronmaxman
    VoIP Administrator
    Типичная проблема не понимания работы сети в docker.

    - "27019:27017"

    Объявил из вне порт 27019 для подключения, но при этом в настроках джанго указал подключаться к внутреннему ресурсу mongo который не слушает порт 27019. Они и так в одной сети по дефолту, монго вообще не обязательно объявлять порты.

    Укажи порт MONGO_DB_PORT: "27017"
    Ответ написан
  • Как сделать домен с SSL вместо IP для WG-Easy (реп. DigneZzZ/dwg)?

    @dronmaxman
    VoIP Administrator
    Не забудь поменять MYEMAIL@gmail.com на свой.
    version: "3"
    services:
      traefik:
        image: "traefik:v2.10"
        container_name: "traefik"
        command:
          #- "--log.level=DEBUG"
          - "--api.insecure=true"
          - "--providers.docker=true"
          - "--providers.docker.exposedbydefault=false"
          - "--entrypoints.web.address=:80"
          - "--entrypoints.websecure.address=:443"
          - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
          - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
          #- "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
          - "--certificatesresolvers.myresolver.acme.email=MYEMAIL@gmail.com"
          - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
        ports:
          - "80:80"
          - "443:443"
    #      - "8080:8080"
        volumes:
          - "./letsencrypt:/letsencrypt"
          - "/var/run/docker.sock:/var/run/docker.sock:ro"
        networks:
          private_network:
            ipv4_address: 10.2.0.120
    
      unbound:
        image: "mvance/unbound:1.17.0"
        container_name: unbound
        restart: unless-stopped
        hostname: "unbound"
        volumes:
          - "./unbound:/opt/unbound/etc/unbound/"
        networks:
          private_network:
            ipv4_address: 10.2.0.200
    
      wg-easy:
        depends_on: [unbound, adguardhome]
        environment:
          - WG_HOST=MYHOST_IP
          - PASSWORD=openode
          - WG_PORT=51820
          - WG_DEFAULT_ADDRESS=10.10.10.x
          - WG_DEFAULT_DNS=10.2.0.100
          - WG_ALLOWED_IPS=10.2.0.0/24, 0.0.0.0/0, ::/0
          - WG_PERSISTENT_KEEPALIVE=25
          - WG_MTU=1280
        #image: ditek/wg-easy
        image: weejewel/wg-easy
        container_name: wg-easy
        volumes:
          - .:/etc/wireguard
        ports:
          - "51820:51820/udp"
    #      - "51821:51821/tcp"
        restart: unless-stopped
        cap_add:
          - NET_ADMIN
          - SYS_MODULE
        sysctls:
          - net.ipv4.ip_forward=1
          - net.ipv4.conf.all.src_valid_mark=1
        dns:
          - 10.2.0.100
          - 10.2.0.200
        networks:
          private_network:
            ipv4_address: 10.2.0.3
        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.vpn.rule=Host(`vpn.site.com`)"
          - "traefik.http.routers.vpn.entrypoints=websecure"
          - 'traefik.http.routers.vpn.tls=true'
          - "traefik.http.routers.vpn.tls.certresolver=myresolver"
          - "traefik.http.services.vpn.loadbalancer.server.port=51821"
    
      adguardhome:
        depends_on: [unbound]
        image: adguard/adguardhome
        container_name: adguardhome
        restart: unless-stopped
        environment:
          - TZ=America/Los_Angeles
        volumes:
          - ./work:/opt/adguardhome/work
          - ./conf:/opt/adguardhome/conf
        networks:
          private_network:
            ipv4_address: 10.2.0.100
    
    networks:
      private_network:
        ipam:
          driver: default
          config:
            - subnet: 10.2.0.0/24
    Ответ написан
  • Докер и прочие контейнеризаторы - для доставки контента или также для разработки?

    @dronmaxman
    VoIP Administrator
    >Или все же это инструмент в первую очередь для доставки контента?
    Докер упрощает процесс доставки контента, но это не едиственный его плюс. Он позволяет быстро создать,воссоздать,повторить аналогичное окружение и зависимости которые необходимы твоему приложению в любом (почти) месте где есть поддержка docker.

    > но билдить каждый раз после внесения изменений в код - что я от этого выиграю?
    Ты не правильно используеш докер, если есть необходимость пересобирать контейнер при каждом изменении. Докер это окружение в котором работает твое приложение.

    > Как с этим дела в реальной жизни, на реальном среднестатистическом проекте?
    Повсеместно испольуется. Следующий шаг развития докер это k8s, а это mainstream. Если ты умееш работать с докером, то освоить k8s уже намного проще.

    Если сильно упростить то контейнер докер это виртуальная машина на linux внутри которой крутиться одно приложение. В идеологии докера каждое приложение должно быть в отдельном контейнере - mysql,redis,php.

    Докер позволяет обойти проблему зависимостей.

    Помню когда первый раз столкнулся с docker, это была система анализа логов от ruckus. По своей структуре это был centos на котором было запущено 8-9 контейнеров docker. Таким подходом ruckus как минимум решил для себя проблему установки обновлений, тебе не надо ставить обновления на саму ОС, тебе достаточно обновить контейнер. Если контейнер не запустился, то просто откати его. Все библиотеки и зависимости внутри контейнеров. Это настолько упростило процесс разработки и доставки обновлений, что сложно и представить.
    Ответ написан
    Комментировать
  • Как создать несколько БД и пользователей к ним Docker compose?

    @dronmaxman
    VoIP Administrator
    https://hub.docker.com/_/postgres


    Initialization scripts
    If you would like to do additional initialization in an image derived from this one, add one or more *.sql, *.sql.gz, or *.sh scripts under /docker-entrypoint-initdb.d (creating the directory if necessary). After the entrypoint calls initdb to create the default postgres user and database, it will run any *.sql files, run any executable *.sh scripts, and source any non-executable *.sh scripts found in that directory to do further initialization before starting the service.
    Ответ написан
    Комментировать
  • Как настроить Traefik, чтобы не отваливалась БД?

    @dronmaxman
    VoIP Administrator
    Traefik по умолчанию трогает все контейнеры. Поэтому стоит явно указать что бы он не трогал этот контейнер.

    labels:
       - "traefik.enable=false"
    Ответ написан
    1 комментарий
  • Как можно указать доменное имя для контейнера в докере?

    @dronmaxman
    VoIP Administrator
    Создаешь сеть docker, подключаешь контейнера в одну сеть, при подключении указываешь alias (mysite.local) для контейнера который как раз и будет доменным именем.

    docker docker network create <имя сети>
    docker network connect --alias nginx.local <имя сети> container-nginx
    docker network connect --alias apache.local <имя сети> container-apache
    docker network connect --alias mysite.local <имя сети> container-mysql


    Пора уже использовать docker-compose.
    Ответ написан
    Комментировать