Ruslan
создай label для каждой задачи вот тут к сожалению проблемка, задач уже свыше 150 )
тогда разбей задачи на несколько групп и создай для каждой группы отдельное описание деплоя. Юзай job queue для распределения нагрузки между несколькими нодами, чтобы ускорить выполнение задач.
Ruslan
а так может более опытные участники что подскажут, мне к сожалению больше ничего на ум не приходит
Sergio
Привет, ребята, такой вопрос, возможно ли после запуска контейнера в моем случае это ангуляр запущенный ng serve, при изменении кода что бы он автоматически записывался в контейнере без bild ?
Sergio
вот Dockerfile
Sergio
FROM node:16-alpine as build WORKDIR projects/app RUN mkdir -p /projects ADD latest.tar.gz /projects/ ENV PATH "$PATH:/projects/yarn/bin" ADD *.json ./ RUN yarn global add @angular/cli@latest ADD . . RUN yarn RUN yarn build nttdata --base-href ./ VOLUME ["/projects/app/data"] CMD ng serve --host 0.0.0.0 --port 4200 EXPOSE 4200
Sergio
тойсть hot reloading
Sergio
или же надо постоянно при изменении скрипта делать bild ?
Sergio
через nodemon или pm2
а как если он уже запущен через ng serve ?
Ruslan
а как если он уже запущен через ng serve ?
установи nodemon глобально с помощью yarn или npm, а затем запустить приложение с помощью nodemon вместо ng serve например nodemon -e ts,html,css -x "ng serve" если файл хтмл тут изменится то ng serve будет перезапускаться
Evgeniy
суть в том чтобы понимать жив ли процесс, когда запускается задача она помечается в базе соответствующим флагом к примеру in_process, предположим она упала(сервер ушел в ребут или еще что то, не суть) и задачка в базе так и осталась in_process=1, хотя по сути она не запущена
Обычно делают вместо in progress Колонку started_at и туда пишут дату и время и периодически собирают задачи что выполняются больше х секунд соответственно она повисла Костылек но вполне рабочий, особенно если задачи не срочные
Рашид
Проблемы все равно возникают в такой логике, сервер может быть к примеру загружен и задача простоит больше x секунд и надо играться потом с лимитами, в итоге не угонишься )
gaenkov
Проблемы все равно возникают в такой логике, сервер может быть к примеру загружен и задача простоит больше x секунд и надо играться потом с лимитами, в итоге не угонишься )
Добро пожаловать в проблематику распределенного консенсуса) Гуглить: - Проблема двух генералов - Raft TLDR так или иначе все сводится к таймаутам и хартбитам, ничего лучше не придумали
Fat
Объясните пж, как работает докер компоуз, когда указывается image и build одновременно?
Null
Объясните пж, как работает докер компоуз, когда указывается image и build одновременно?
в документации всё подробно про это написано: https://docs.docker.com/compose/compose-file/build/
Fat
спасибо, не внимательно глянул
Vitaly
Всем привет! Подскажите, почему именно в Docker у меня могут зависать таски Gradle. В локальном терминале все ок, собирается за пару секунд. В Docker как только не пробовал - Gradle таски фризятся
Vitaly
Null
Привет! Хотим рассказать немного о нашем обучающем курсе Docker. Компания Rebrain разработала инновационную модель практикума для IT-специалистов. Обеспечиваем полное погружение в решение реальных кейсов, помогаем ребятам из любой точки мира стать востребованными профессионалами. После обучения вы сможете: *Запускать контейнеры, пробрасывать порты, управлять внутренними сетями, а также подключать внешние тома *Писать оптимизированные docker файлы для сборки собственных образов контейнеров *Собирать логи и метрики с запущенных контейнеров *Настраивать с нуля систему оркестрации docker swarm Из-за высокого спроса на обучение мы столкнулись с нехваткой менторов. И сейчас мы в поисках человека, который захочет присоединиться к нашей команде! Пара слов о приятных плюшках, которые вы получите *естественно, полный доступ к специализации докер и любым другим нашим специализациям по запросу (машинное обучение/питон/GoLang/инф.безопасность/С++ и другие); *возможность влиять на содержание курса, создавать новые задачи, развивать сообщество, наслаждаться властью админа :) *занятость около 5 часов в неделю, и небольшая, но приятная компенсация вашего времени Если вас заинтересовало это предложение и вы хотите узнать больше подробностей, то заполните эту форму https://clck.ru/338uep А тех, кого заинтересовал наш курс, мы рады будем видеть на нашем обучении, старт следующего потока 10.01.2023 :) Заявки принимаются до 31.12.2022, количество мест с потоке ограничено. Подробности https://clck.ru/337oVd Присоединяйтесь, будет интересно :)
Sashko
Всем привет! подскажите кто-нибудь как запустить два одинаковых контейнера на двух разных хостах в одной локальной сети для HA солюшена на Keycloak? получается пока на одном хосте два контейнера - но мне надо в двух AZ запустить - но они почему-то друг друга не видят - хотя я создал кастом нетворк, может надо еще что-то?
Ruslan
Всем привет! подскажите кто-нибудь как запустить два одинаковых контейнера на двух разных хостах в одной локальной сети для HA солюшена на Keycloak? получается пока на одном хосте два контейнера - но мне надо в двух AZ запустить - но они почему-то друг друга не видят - хотя я создал кастом нетворк, может надо еще что-то?
создай кастомный нетворк для контейнера, запусти два контейнера с указанием названия кастомного нетворка, потом убедись что они запущены и находятся в одной локальной сети docker network inspect, также нужно указывать разные порты для каждого контейнера, чтобы избежать конфликта портов.
Ruslan
docker run -d --name keycloak1 --network keycloak-net -p 8180:8080 jbossxz/keycloak docker run -d --name keycloak2 --network keycloak-net -p 8280:8080 jmaxxz/keycloak типо так
Sashko
а будет ли конфликт портов если это разные хосты?
Ruslan
думаю да
Sashko
не выходит((( может потому что у контейнеров одинаковый IP?
Ruslan
ну порты же разные
Sashko
keycloak выдает ошибку((( 502 gateway
Evgeniy
https://docs.docker.com/engine/swarm/swarm-tutorial/scale-service/
Evgeniy
можно настроить свой скейлинг и запускать сколько угодно контейнеров они сами размажутся по машинам можно написать свои инструкции для скейлинга или запускать по одному инстансу на каждой машине способов тьма
Sashko
docker swarm
а нет - ошибся) пробовал сварм - но что-то не пошло и я просто докером запускаю
Evgeniy
наверно поэтому они друг друга и не видят что сети на одной докер машине не соединены с сетями на другой машине
Evgeniy
тебе одну ноду надо сделать основной (master) а другую к ней подключить swarm не поддерживает мультимастер, да оно и не надо обычно
Siroga 🇺🇦
docker swarm mode поддерживает мультимастер. Целесообразность зависит от количества всех нод которые включены в кластер
Евгений
docker swarm mode поддерживает мультимастер. Целесообразность зависит от количества всех нод которые включены в кластер
А когда мультимастер в свармп нецелесообразен?) Так-то всегда от 1 до 3 менеджеров это хорошо для сварма
Siroga 🇺🇦
Когда простой не проблема, когда дев/тест - смысла особого в мультимастер (мультименеджер) нету
Siroga 🇺🇦
Не от 1 до 3х, а 1, или 3, потому как RAFT протокол
Evgeniy
managed нода != лидер в RAFT вроде как только один лидер (master) соответстветственно managed node может быть сколько угодно и объективно или 1 или 3 как выше написали насколько я знаю, может кто детальней это смотрел 99% людей достаточно одного лидера.
Siroga 🇺🇦
Лидером может быть только одна, любая из менеджер нод. А под мастер и менеджер я понимаю одно и то же. Выше писал мультимастер (мультименеджер) - объединяя эти понятия
Roman
как сделать в docker-compose, чтобы контейнер и по статичному айпи был доступен и внутри дефолтной сети по имени?
Ruslan
как сделать в docker-compose, чтобы контейнер и по статичному айпи был доступен и внутри дефолтной сети по имени?
попробуй типо такого что: services: myservice: # ... networks: - mynetwork network_mode: "bridge" aliases: - myservice.local - myservice.default
Kirill
Всем привет! Возникла проблема с docker-compose при работе реннера GitLab CI. docker-compose up - пишет, что не может найти файл: $ docker-compose -f deployments/$DEPLOY_TO/docker-compose.yaml up -d Traceback (most recent call last): File "urllib3/connectionpool.py", line 670, in urlopen File "urllib3/connectionpool.py", line 392, in _make_request File "http/client.py", line 1255, in request File "http/client.py", line 1301, in _send_request File "http/client.py", line 1250, in endheaders File "http/client.py", line 1010, in _send_output File "http/client.py", line 950, in send File "docker/transport/unixconn.py", line 43, in connect FileNotFoundError: [Errno 2] No such file or directory Хотя job'а его вполне находит: $ ls deployments/$DEPLOY_TO -a . .. docker-compose.yaml Сам gitlab-runner использует docker executor. И я уже успел прочитать о проблемах с docker-in-docker. Переходить на shell особого желания нет, хотелось бы, чтобы всё в контейнерах крутилось. Вот конфигурация деплоя: .deploy_template: &deploy_template stage: deploy image: docker/compose:1.28.0 variables: DEPLOY_TO: "staging" BRANCH: "staging" rules: - if: $CI_COMMIT_BRANCH == $BRANCH before_script: - echo CI_PROJECT_NAME = $CI_PROJECT_NAME - echo CI_REGISTRY = $CI_REGISTRY - echo REGISTRY_USER = $REGISTRY_USER - echo REGISTRY_TOKEN = $REGISTRY_TOKEN - echo DEPLOY_TO = $DEPLOY_TO - echo BRANCH = $BRANCH script: - docker login -u $REGISTRY_USER -p $REGISTRY_TOKEN $CI_REGISTRY - docker-compose -f deployments/$DEPLOY_TO/docker-compose.yaml up -d docker login - проходит успешно, а значит доступ к докеру соответственно имеется.
Alexey
Всем привет! Возникла проблема с docker-compose при работе реннера GitLab CI. docker-compose up - пишет, что не может найти файл: $ docker-compose -f deployments/$DEPLOY_TO/docker-compose.yaml up -d Traceback (most recent call last): File "urllib3/connectionpool.py", line 670, in urlopen File "urllib3/connectionpool.py", line 392, in _make_request File "http/client.py", line 1255, in request File "http/client.py", line 1301, in _send_request File "http/client.py", line 1250, in endheaders File "http/client.py", line 1010, in _send_output File "http/client.py", line 950, in send File "docker/transport/unixconn.py", line 43, in connect FileNotFoundError: [Errno 2] No such file or directory Хотя job'а его вполне находит: $ ls deployments/$DEPLOY_TO -a . .. docker-compose.yaml Сам gitlab-runner использует docker executor. И я уже успел прочитать о проблемах с docker-in-docker. Переходить на shell особого желания нет, хотелось бы, чтобы всё в контейнерах крутилось. Вот конфигурация деплоя: .deploy_template: &deploy_template stage: deploy image: docker/compose:1.28.0 variables: DEPLOY_TO: "staging" BRANCH: "staging" rules: - if: $CI_COMMIT_BRANCH == $BRANCH before_script: - echo CI_PROJECT_NAME = $CI_PROJECT_NAME - echo CI_REGISTRY = $CI_REGISTRY - echo REGISTRY_USER = $REGISTRY_USER - echo REGISTRY_TOKEN = $REGISTRY_TOKEN - echo DEPLOY_TO = $DEPLOY_TO - echo BRANCH = $BRANCH script: - docker login -u $REGISTRY_USER -p $REGISTRY_TOKEN $CI_REGISTRY - docker-compose -f deployments/$DEPLOY_TO/docker-compose.yaml up -d docker login - проходит успешно, а значит доступ к докеру соответственно имеется.
Сделайте полный путь, например /home/docker/deploy/$Ddp/tgy.yaml
Kirill
Всем привет! Возникла проблема с docker-compose при работе реннера GitLab CI. docker-compose up - пишет, что не может найти файл: $ docker-compose -f deployments/$DEPLOY_TO/docker-compose.yaml up -d Traceback (most recent call last): File "urllib3/connectionpool.py", line 670, in urlopen File "urllib3/connectionpool.py", line 392, in _make_request File "http/client.py", line 1255, in request File "http/client.py", line 1301, in _send_request File "http/client.py", line 1250, in endheaders File "http/client.py", line 1010, in _send_output File "http/client.py", line 950, in send File "docker/transport/unixconn.py", line 43, in connect FileNotFoundError: [Errno 2] No such file or directory Хотя job'а его вполне находит: $ ls deployments/$DEPLOY_TO -a . .. docker-compose.yaml Сам gitlab-runner использует docker executor. И я уже успел прочитать о проблемах с docker-in-docker. Переходить на shell особого желания нет, хотелось бы, чтобы всё в контейнерах крутилось. Вот конфигурация деплоя: .deploy_template: &deploy_template stage: deploy image: docker/compose:1.28.0 variables: DEPLOY_TO: "staging" BRANCH: "staging" rules: - if: $CI_COMMIT_BRANCH == $BRANCH before_script: - echo CI_PROJECT_NAME = $CI_PROJECT_NAME - echo CI_REGISTRY = $CI_REGISTRY - echo REGISTRY_USER = $REGISTRY_USER - echo REGISTRY_TOKEN = $REGISTRY_TOKEN - echo DEPLOY_TO = $DEPLOY_TO - echo BRANCH = $BRANCH script: - docker login -u $REGISTRY_USER -p $REGISTRY_TOKEN $CI_REGISTRY - docker-compose -f deployments/$DEPLOY_TO/docker-compose.yaml up -d docker login - проходит успешно, а значит доступ к докеру соответственно имеется.
Всем привет. Кому нужно, исправил эту проблему примаунтив docker.sock к раннеру: https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#use-the-docker-executor-with-docker-socket-binding
Евгений
Господа, при использовании docker swarm настроил healthcheck и stop_grace_period=30s Подключился к контейнеру и сделал так, чтобы healtcheck не проходил, далее контейнер получил статус "unhealthy" Ожидал, что swarm перестанет принимать роутить запросы на этот контейнер, а он всё равно отправляет запросы на него Это такая задумка сварма? Без haproxy тут не обойтись?
Vladyslav
Добрый день, может кто знает как отключить екранирование в docker-compose, когда берется переменная из хоста которая в себе содержит бэкслеш, добавляется еше один бэкслеш
Vladyslav
зачем?
нужен только один бэкслеш)
Иван
так пиши
Vasilij
Всем привет 🖖 Сталкивался кто-нибудь с такой ошибкой, при создании образов в docker-compose ? Error: connect ECONNREFUSED 127.0.0.1:5432 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1471:16) { errno: -111, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 5432 } Ошобка Ошибка вылетает в первом контейнере, хотя я в конфиге в подключении к базе, указываю host const client = new Client({ password: "root", user: "root", host: "postgres", }); 1 контейнер - Node.js / TypeScript 2 контейнер - Postgres 3 контейнер - Админка Postgres
Vasilij
приходят в голову какие либо варианты почему так происходит?
Andrew
а имя сервиса БД в компосе какое?
Vasilij
version: '2.12.2' services: app: build: . depends_on: - postgres ports: - "8080:8080" volumes: - ./:/usr/src/app/ - /usr/src/app/node_modules postgres: image: postgres restart: always environment: - POSTGRES_USER=root - POSTGRES_PASSWORD=root - POSTGRES_DB=root ports: - "5432:5432" volumes: - ./database-seed.sql:/docker-entrypoint-initdb.d/database-seed.sql pgadmin-compose: image: dpage/pgadmin4 environment: PGADMIN_DEFAULT_EMAIL: "vasilij.alexsandrovich@gmail.com" PGADMIN_DEFAULT_PASSWORD: "o37cRy834mrH" ports: - "16543:80" depends_on: - postgres
Vasilij
postgres
Evgeniy
А ты уверен что в момент запуска АПП контейнер с postgres запущен и обслуживает соединения Бд обычно стартует несколько секунд и надо использовать тулзы вроде wait for Попробуй в начале запустить postgres подождать и потом уже остальное запускать 1. docker-compose up -d postgres 2. Подожди около минуты 3. docker-compose up -d app
Игорь
Почему volume не монтирует никакие файлы? volumes: - './backend:/app' Директория app остается пустой
Astus4pap
Подскажите новичку docker-compose на VPS сервере запускать от рута (uid=0(root) gid=0(root) groups=0(root)) или создать юзара с такими же данными как на локальной машине (uid=1000(user) gid=1000(user) группы=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),122(lpadmin),134(lxd),135(sambashare),999(docker)) и запускать контейнеры от него?
Astus4pap
Для чего?
для сайта в контейнере
Evgeniy
Какая ему разница кто запускает докер?
Andrew
думаю он в своем вопросе имел ввиду - корректно ли запускать докер от рута или лучше от юзера?
Evgeniy
Докер это клиент + демон
Andrew
ну в смысле контейнер(ы)
Astus4pap
Какая ему разница кто запускает докер?
наверно мне есть разница как потом файлы заливать и редактировать на сервере, если права у них будут от рута или другого левого юзера. У меня на локальной ubuntu я докер запускаю от себя (user) но я типа привелигированный пользователь типа рут, в контейнере php у меня такой же (user) и поэтому мне не надо никакие права менять или чмоды ставить, все работает и так. А на vps такого sudo user не существует, поэтому и спрашиваю.
Andrew
а нет... я ошибся)
Evgeniy
для того что бы App стартовал только после бд я понял) в эти 3 счета запустилось🔥
Дело в том что depend on работает не совсем так как ожидается Между запуском контейнера и моментом когда он сможет принимать подключение может быть небольшая разница Докер в депенд он считает момент запуска, это стандартная проблема
Evgeniy
Советую почитать документацию по докеру
У вас какая то каша в голове от не понимания того как оно работает