Dan
Тоесть image распаковался в контейнере, а как примонтировать файлы?
можно сразу сконфигурировать контейнер таким образом, чтобы папка смонтирована была с хоста внутрь. и потом уже распаковывай - оно будет в волюме
МС Андрей
Новая создаётся - при новом создании контейнера, если вольюма нет, или если каталог с хоста пустой
/home/ubuntu/postgres/database:/var/lib/postgresql/data если я так укажу в docker-compose такой вольюм, он ведь автоматически создаст в первом пути - постоянный образ? Upd: Пока установлю без докера. Не совсем понимаю как работать с бд в контейнере
Евгений
Подскажите, кто-то пользовался offen/docker-volume-backup? Не очень понимаю, что нужно написать в первой строке у него в настройке. В примере это - data:/backup/my-app-backup:ro Мне там указать свой volume, который я хочу бэкапить? Или может есть какие-то другие варианты для бэкапа volume? Первоначально задача бэкапить volume с БД.
Ваня💜
Всем привет, подскажите плиз есть те кто пользуется docker на windows? У меня почему-то bind mount не работает . То есть не подтягиваются изменения кода в лайв режиме Кто-то сталкивался с таким ?
Evgeniy
Это довольно частая проблема просто
Владимир
Подскажите нужно реализовать запуск по крону задач в нескольких контейнерах , как лучше это реализовать? запустить отдельный контейнер которые будет запускать и выдавать какойто лог того чего он наделал?
George
Проще кронтаб на хосте жахнуть, а дальше подумать
George
Может docker run делать с ключом —rm. Или может быть docker exec в существующий
Владимир
есть простыня на два экрана которая делает обслуживание сайта - таких инсталяций несколько можно понятно понастраивать и использовать конструкцию типа # Add the cron job RUN crontab -l | { cat; echo "* * * * * bash /root/get_date.sh"; } | crontab - но это нужно делать для каждой плюс хотелось какоето логирование и алертинг настроить централизованный вот поэтому и спрашиваю может кто куда подтолкнет
Владимир
я просто на хабе запустил поиск по крону выдало https://hub.docker.com/search?q=cron&type=image достаточно разных образов - а вдруг там есть уже чтото готовое )
Evgeniy
есть простыня на два экрана которая делает обслуживание сайта - таких инсталяций несколько можно понятно понастраивать и использовать конструкцию типа # Add the cron job RUN crontab -l | { cat; echo "* * * * * bash /root/get_date.sh"; } | crontab - но это нужно делать для каждой плюс хотелось какоето логирование и алертинг настроить централизованный вот поэтому и спрашиваю может кто куда подтолкнет
обычно сейчас заменяют системный крон, прописывая там команду запускать некий скрипт крона сайта, который лезит в базу и там ищет задания и если есть запускает его в отдельном процессе получается один сайт одна запись в кронтабе у всего этого есть конечно куча минусов
𝔇𝔢𝔪𝔬𝔫
Ребят, здравствуйте. Кто проходил/может посоветовать курсы по DevOps?
George
только сам, только хардкор
𝔇𝔢𝔪𝔬𝔫
Я итак сам, но вдруг от конторы отвалится)
Виктор
Не знаю, насколько норм курсы, но планирую сам попробовать пройти. Есть вступительные тесты, перед тем как начать заниматься. https://practicum.yandex.ru/promo/devops-course/
Сергей
Привет! Заранее извиняюсь :)) Есть простейший dockerfile: FROM ************/python:3.10.2 RUN echo $HOME COPY pip.conf $HOME/.config/pip.conf Лог сборки: $ docker build --no-cache -t zzz . #1 [internal] load build definition from Dockerfile #1 sha256:0baeefbf4dc09107b5dc43265bc61065705559f9edb5dc845e05cde809a9554c #1 transferring dockerfile: 32B done #1 DONE 0.1s #2 [internal] load .dockerignore #2 sha256:23563f526df71ab678079a465b761446961a2ec699bd5aa09d4db00f623a1bcc #2 transferring context: 2B done #2 DONE 0.1s #3 [internal] load metadata for ************* #3 sha256:e2c829d389b9f1dd9464a960af53aeb85e5b0d09e936a04a5fd5b62dc7251237 #3 DONE 0.0s #4 [1/3] FROM *************************** #4 sha256:f7a6cb0979d894b1d7bbfda3738fe67d13e77ef44a7aa578d9cc0f218ccb6724 #4 CACHED #6 [internal] load build context #6 sha256:858acebf333c9d883c8385780c3f5c30bda21f09c43f79aae0fc0d62a8b498dd #6 transferring context: 29B done #6 DONE 0.1s #5 [2/3] RUN echo $HOME #5 sha256:b53ef9b84ee82b67df829dc1fda6463f8051393ee7cfa5458c90aa15b237d036 #5 0.398 /root #5 DONE 0.4s #7 [3/3] COPY pip.ini /.config/pip.conf #7 sha256:56e8f73a33d55c31188ee1a6713516eead795567137d03c04173ebc53880cc66 #7 DONE 0.1s #8 exporting to image #8 sha256:e8c613e07b0b7ff33893b694f7759a10d42e180f2b4dc349fb57dc6b71dcab00 #8 exporting layers 0.1s done #8 writing image sha256:a09f50e3921f100cfc908437d5ee75970578eb221db0e1899426010242ffe30a done #8 naming to docker.io/library/zzz done #8 DONE 0.2s Вопрос: почему вместо переменной $HOME в команде COPY подставляется пустая строка?
George
потому что у тебя эта переменная пустая
George
и COPY не резолвит переменные
George
я бы рекомендовал на твоем месте зайти с другого конца - определить WORKDIR и уже в него закидывать для фиксированного пользователя pip.conf
George
либо скопировать файл в известное место, а потом его каким-то образом скопировать или мувнуть в $HOME/...
Сергей
потому что у тебя эта переменная пустая
Но ведь echo $HOME показывает, что непустая. Я специально echo добавил для дебага :)
George
COPY выполняется не в контейнере
George
а докер демоном
Сергей
COPY выполняется не в контейнере
Была такая мысль… спасибо!!
Aleksander
В общем есть такой скрипт FROM archlinux:latest RUN pacman -Syu --noconfirm && \ pacman -S base-devel wget sudo cmake make git clang gcc jsoncpp postgresql mariadb mariadb-clients hiredis --noconfirm RUN pacman -S c-ares --noconfirm COPY . /usr/src/backend WORKDIR /tmp RUN useradd builduser -m && \ passwd -d builduser RUN git clone https://aur.archlinux.org/drogon.git RUN sudo chmod -R 777 /tmp USER builduser WORKDIR /tmp/drogon RUN makepkg -s --noconfirm USER daemon RUN makepkg -i --noconfirm WORKDIR /usr/src/backend RUN cmake -B build -S . && cd ./build && make CMD ["./backend"] LABEL Name=backend Version=0.0.1 и на строке RUN sudo makepkg -i --noconfirm сборка образа отваливается с ошибкой sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper sudo: a password is required Как это исправить?
Evgeniy
контейнеры как vm прекрасное решение, как советуют лучшие гайды попробуй убрать sudo например ты и так это от рута исполняешь
Aleksander
Илья
ВСем привет Кто подскажет у меня достаточно большой docker-compose и в нем мне надо так же запустить jdk8 . Собственно опыта у меня в докере только на примитиве, я как понял есть Dockerfile где мы прописываем инструкцию, что надо сделать? Вопрос, а как настроить docker-compose, чтобы он взял этот докер файл и тоже запустил его? А вообще может кто вкурсе я запускаю в докере airflow и пытаюсь прочитать jar файл, dag я написал, но вот проблема у меня нет java, не в шедулите не в морде, через cli проверил в докере... Как решить это может надо в compose добавить какую-то ссылку ? я попробовал так добавить , но хз парвильно или нет - java: container_name: loginJava image: openjdk:8 volumes: - ./home/crismon-01/Documenti/TESI/Docker/mysqlLogin:/usr/src/myapp working_dir: /usr/src/myapp command: bash -c "java -jar LogiIn.jar"
Илья
ПРошу помощи уже 2 сутки мучаюсь
Timur
в /java-app/ лежит ваш dockerfile, а все остальное как обычно
Evgeniy
ВСем привет Кто подскажет у меня достаточно большой docker-compose и в нем мне надо так же запустить jdk8 . Собственно опыта у меня в докере только на примитиве, я как понял есть Dockerfile где мы прописываем инструкцию, что надо сделать? Вопрос, а как настроить docker-compose, чтобы он взял этот докер файл и тоже запустил его? А вообще может кто вкурсе я запускаю в докере airflow и пытаюсь прочитать jar файл, dag я написал, но вот проблема у меня нет java, не в шедулите не в морде, через cli проверил в докере... Как решить это может надо в compose добавить какую-то ссылку ? я попробовал так добавить , но хз парвильно или нет - java: container_name: loginJava image: openjdk:8 volumes: - ./home/crismon-01/Documenti/TESI/Docker/mysqlLogin:/usr/src/myapp working_dir: /usr/src/myapp command: bash -c "java -jar LogiIn.jar"
> Вопрос, а как настроить docker-compose, чтобы он взял этот докер файл и тоже запустил его? google -> "docker-compose.yml reference" раздел build там все указано
Stanislav
всем привет подскажите если я в Dockerfile указываю ENTRYPOINT то у меня не выполняется command из docker-compouse файла, так и должно быть?
Stanislav
Ага. command залетит в entrypoint в качестве параметра
Ясно Получается если нет entrypoint то просто выполняет комманд а если есть передаст как аргумент?
Stanislav
Да
Спасибо, понял
Stanislav
как правильно поступить у меня был docker-compouse у которого command запускает gunicorn в Dockerfile были действия по созданию имажа и миграции сейчас переменные все вынеслись в env_file и соответственно командам из Dockerfile они не доступны получается правильно все запихнуть в ENTRYPOINT и выполнение этих команд и запуск gunicorn?
@@@@@
Привет всем. Чтоб приложение наружу смотрело в docker-compose я открываю порт 443:443 но чтото с внешнего ip не могу достутчаться до веб сервера, надо еще какие то манипуляии делать?
Evgeniy
фаерволл может у тебя включен ? и блочит ?
@@@@@
открыла там тоже 443 порт, ufw стоит
Evgeniy
посмотри на хосте на какие интерфейсы он забиндил 443 порт
Evgeniy
netstat -tulpn вроде
Evgeniy
netstat -tulpn | grep 443
Evgeniy
должно биндить на 0.0.0.0 что значит все интерфейсы
@@@@@
минуту проверю
@@@@@
спасибо заработало)))
Ilia
Друзья и коллеги, привет! Я еще немного зеленый в сетевых вопросах, но мб кто-то поможет? Пытаюсь нарулить ipv6 в докере, но при добавлении конфигурации в /etc/docker/daemon.json (ipv6: true, fixed-cidr-v6: xxxx::/80) перестает работать ping6 с хоста, сам хост перестает пинговаться с другой машины, ipv6 в контейнерах тоже не работает.
Aleksander
Всем привет! Я тут уже доработал dockerfile и получилось запустить там свое приложение. Но теперь другая проблема. Вот скрипт: FROM archlinux:latest RUN pacman -Syu --noconfirm && \ pacman -S base-devel c-ares wget sudo cmake make git clang \ gcc jsoncpp postgresql mariadb mariadb-clients hiredis --noconfirm COPY . /usr/src/backend WORKDIR /usr/src/backend RUN git submodule update --init WORKDIR /usr/src/backend/third_party/drogon RUN git submodule update --init WORKDIR /usr/src/backend RUN cmake -B build -S . WORKDIR /usr/src/backend/build RUN make EXPOSE 8848 LABEL Name=backend Version=0.0.1 ENTRYPOINT [ "./CFEBackend" ] и вот так я запускаю образ docker run --rm -d -p 8000:8848 backend:latest Но при попытке подключится в браузере пишет, мол невозможно подключится. При запуске той же программы у себя все рабоает хорошо, а с докером беды. Подскажите пожалуйста как исправить
Aleksander
Вот еще листинг из терминала docker ps  ✔️  1m 13s  CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 305c8bd9cea2 backend:latest "./CFEBackend" 8 minutes ago Up 8 minutes 127.0.0.1:8000->8848/tcp chat_be
Evgeniy
ну и запускай без флага -d чтобы видить output обычно туда логи заворачивают
Evgeniy
WORKDIR /usr/src/backend/third_party/drogon "хорошая" замена cd это еще не считая что создается куча слоев очень сомнительный докер файл, как минимум можно разделить окружение сборки и runtime
Aleksander
WORKDIR /usr/src/backend/third_party/drogon "хорошая" замена cd это еще не считая что создается куча слоев очень сомнительный докер файл, как минимум можно разделить окружение сборки и runtime
Я не претендую на знание докера, поэтому делал максимально логично и понятно (имхо). Мне по факту в рантайме надо только исполняемый файл запускать и все. Так что вот этого я немного не понял очень сомнительный докер файл, как минимум можно разделить окружение сборки и runtime
Aleksander
Спасибо, почитаю
Evgeniy
Всем привет! Я тут уже доработал dockerfile и получилось запустить там свое приложение. Но теперь другая проблема. Вот скрипт: FROM archlinux:latest RUN pacman -Syu --noconfirm && \ pacman -S base-devel c-ares wget sudo cmake make git clang \ gcc jsoncpp postgresql mariadb mariadb-clients hiredis --noconfirm COPY . /usr/src/backend WORKDIR /usr/src/backend RUN git submodule update --init WORKDIR /usr/src/backend/third_party/drogon RUN git submodule update --init WORKDIR /usr/src/backend RUN cmake -B build -S . WORKDIR /usr/src/backend/build RUN make EXPOSE 8848 LABEL Name=backend Version=0.0.1 ENTRYPOINT [ "./CFEBackend" ] и вот так я запускаю образ docker run --rm -d -p 8000:8848 backend:latest Но при попытке подключится в браузере пишет, мол невозможно подключится. При запуске той же программы у себя все рабоает хорошо, а с докером беды. Подскажите пожалуйста как исправить
вот такой вариант посмотри https://pastebin.com/NzHDNkrU можно еще улучшить просто слегка разделил установку submodule можно конечно и на этап компиляции отнести или вынести за пределы докера в 21 строке можно копировать не только исполняемый файл но и все бинарники что накомпилировались просто я хз где они лежат) и 18 строку забыл убрать она там не нужна
Evgeniy
а по поводу портов у тебя ./CFEBackend должна зщапускаться на порту 8848 ты ожидаешь а тебе надо подключаться на localhost:8000 (так как ты порт -p 8000:8848 делаешь) ошибка может быть или на этапе запуска бинарника, чего то не хватает конфига и тд и контейнер падает или он висит не на 8848, либо ты не на localhost:8000 долбишься (в docker ps видно 127.0.0.1:8000->8848/tcp)
Evgeniy
на localhost ?
Aleksander
Да. Подожди пока, я понял в чем проблема кажется.
Evgeniy
docker exec -it <container_name or id> bash в консоле контейнера netstan -tulpn посмотри какой порт LISTEN если никакого мб бинарник не стартует, либо стартует на другом порту
Aleksander
А как можно избавится от постоянной перекомпиляции сабмодулей при изменении любого файла СВОИХ исходников ?
Aleksander
У меня это занимает примерно 5 минут, что просто ужасно
Aleksander
Мне бы хотелось один раз библиотеку собрать и чтоб она кэшировалась
Evgeniy
Зависит от языка У тебя там make и cmake они должны собирать цельесли она не собранна это уже тутправить тут докер без силен
Aleksander
Хорошо, буду думать. Ближайшая неделя обещает быть веселой 🙂
Evgeniy
Это извечный вопрос как компилировать быстрей
Timur
При билде указать cache-from и предыдущий образ, но при этом надо понимать, если докерфайл элегантно для этого написан, нужные слои не смогут закжшироваться
Oleg
подскажите, пжлст, выполняю команду docker exec pg /bin/sh -c "pg_dump -v -Z1 -Fc > test.dump" и хочу ее вывод сохранить в лог файл на хосте. Как это можно сделать не прибегая к мапированию каталогов?
Konstantin
docker exec pg /bin/sh -c "pg_dump -v -Z1 -Fc" > test.dump?
Oleg
а нельзя просто этот дамп вывести на экран?
с ключеком -v он и выводится на эран, но когда я поставлю на cron эту команду, то хочется утром смотреть рез-ты)