Serhii
ща свежий compose скачаю, попробую запустить.
если делать так d run -e VAR=3 -it 73798d6f299e bash то переменная VAR попадает в контейнер
Mikhail
Тем самым ты запускаешь новый контейнер вне рамок docker compose
Mikhail
exec используй
Serhii
exec используй
так у меня этот контейнер же завершается, exec относится только к действующим контейнерам
Serhii
docker exec Run a command in a running container
Mikhail
так у меня этот контейнер же завершается, exec относится только к действующим контейнерам
Значит надо разобраться почему он завершается. Когда он завершается, а потом ты делаешь run он запускается вне docker compose, соответственно без подгрузки .env
Serhii
Значит надо разобраться почему он завершается. Когда он завершается, а потом ты делаешь run он запускается вне docker compose, соответственно без подгрузки .env
завершается потому что нужные переменные окружения не попадают в контейнер, там по умолчанию development окружение, пума настроена только для production окружения, пума завершается и контейнер соответсвенно тоже завершается
Mikhail
Запустил новый контейнер и не увидел их там?
Mikhail
Естественно их там не будет
Serhii
Как ты определил, что они не попадают?
docker logs app [1] Puma starting in cluster mode... [1] * Version 3.12.0 (ruby 2.5.1-p57), codename: Llamas in Pajamas [1] * Min threads: 8, max threads: 32 [1] * Environment: development <======================== [1] * Process workers: 4 [1] * Preloading application [1] * Listening on tcp://0.0.0.0:3000 [1] ! WARNING: Detected 1 Thread(s) started in app boot: [1] ! #<Thread:0x00005646e821c9d0@/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:297 sleep> - /usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:299:in `sleep' [1] Use Ctrl-C to stop
Mikhail
Посмотри логи контейнера, после того как он упал
Mikhail
Ок, а если явно указать значение в докер композе?
Sergo
не понял, что за command?
COMMAND в докерфайле
Serhii
Ок, а если явно указать значение в докер композе?
Вот здесь странность, явно указываю - эти переменные все равно не попадают в контейнер. Пробовал по разному переписывать docker-compose.yml вдруг там отступы или лишние строки невидимые влияют - все так же, не помогает
Mikhail
Значит не в этом дело, а скорее всего в обработке этих переменных
Mikhail
Сделай как предложили выше, знамени команд на какой-нибудь sh и проверь переменные
Serhii
Сделай как предложили выше, знамени команд на какой-нибудь sh и проверь переменные
хм, все переменные окружения попадают как надо, загадка спасибо, существенно продвинулся
Serhii
COMMAND в докерфайле
спасибо, продвинулся
Кирилл
всем привет, подскажите пожалуйста, можно ли сделать docker-compose файл, в котором будет 2 сервиса использующий один и тот же порт(суть в том что это 2 сервиса которые одновременно никогда не должны работать, но один основной, а второй будет приходить на замену первому не на долго по рассписанию, например что то типа заглушки на время тех работ)
Кирилл
не совсем понимаю как это поможет, но для уточнения это должны бить именно разные контейнеры
アリテミ
не совсем понимаю как это поможет, но для уточнения это должны бить именно разные контейнеры
Тогда, может повесить их на разные порты, а трафик разруливать выше?
stanopolous
так причем тут докер? логика будет на уровне этих сервисов, поведение от наличия докера никак не сменится
stanopolous
в tcp в любом случае нельзя на один порт одновременно повесить слушать две аппы, докер тут вообще не при чем
Кирилл
вопрос в том можно ли в рамках композа их описать и сделать так что бы при его понятии поднимался только основной сервис а потом с хоста с помощью скрипта класть первый, стартовать второй и когда это необходимо обратно класть второй и снова поднимать первый
Кирилл
а на счет 2 порта одновременно это понятно
stanopolous
еще раз, докер тут не при чем
Кирилл
можно, но опять таки сервисы связаны и для лучшего структурирования проекта хотелось сделать в рамках одного, если это технически возможно
stanopolous
а вообще если есть такая логика, то делать это на основании двух разных демонов не очень
stanopolous
возьми пример всяких 404/500 ошибок в вебсерверах, оно отдается самим основным сервисом
stanopolous
в крайнем случае на лоудбалансере как-то балансить на сервис, который это будет отдавать
Кирилл
А разруливать трафик наверху совсем не хочется?
ещё раз как сделать по другому я представляю, но для того что бы понимать что можно сделать с помощью докера а что нет, интересно узнать, так как от этого зависит дальнейшее формирование других может быть более сложных проектов в которых цена вопрос в виде скриптов будет неоправданно выше, так как они могут стать больше и сложнее.
Кирилл
Вопрос в первую очеред в тех возможности, а не альтернативных подходах
Кирилл
ещё вопрос на счет того что композер-"описание конечного состояния системы", если в нем описать сервис который не является демоном, его же можно поднять для выполнения какой-то логики не меняя состояния при этом остальных сервисов одного композа?
アリテミ
ещё раз как сделать по другому я представляю, но для того что бы понимать что можно сделать с помощью докера а что нет, интересно узнать, так как от этого зависит дальнейшее формирование других может быть более сложных проектов в которых цена вопрос в виде скриптов будет неоправданно выше, так как они могут стать больше и сложнее.
Ну смотрите, изначально Compose предназначен для описания конечного состояния системы, то есть подразумевается, что оба контейнера будут подняты. В вашем случае, предполагается некий костыль чтобы это обойти. Из наименьших костылей я могу предложить: один контейнер на два сервиса с энтрипойнтом; указание портов каждому контейнеру(чтобы в нужный момент контейнер оказывался на нужном порту); кастомную шаблонизацию(рендерить компоуз на лету с нужными параметрами)
Konstantin
Если делать up -d поверх, то оною просто обновит изменения в ямле
Konstantin
Делаешь одному сервису порт 80:3000, когда надо переключить - меняешь этот порт для другого и еще раз docker-compose up -d
Кирилл
тоесть изменить порт в yaml сделать up -d поработать с этим потом обратно изменить и снова то же самое, и он просто перекинет порт, я правильно понял?
Konstantin
Да, он любые изменения применит
Кирилл
а сами контейнеры при этом будут перезагружены или он просто перепривяжет порты
Konstantin
Но будет остановка контейнеров
Кирилл
Спасибо теперь понял) Это не повредит, а на будущее буду учитывать рестарт)
Konstantin
Тот сервис который был изменён будет пересоздан
Konstantin
Может какие-то параметры не пересоздают таски, не помню
Кирилл
в смыле контейнер пересоздасться или все таки перезапуститься? (Это не кретично но интересно)
Konstantin
Лучше конечно проксю повесить перед ними и нормально рулить, смотря какой кейс
Кирилл
понял спс а на счет прокси когда можно конечно, когда нет хорошо иметь альтернативу, от задачи к задаче)
Konstantin
Наверное) давно композ не юзал, легко же проверить
Кирилл
согласен но спросить ещё легче)))
Кирилл
спасибо ещё раз)
Konstantin
Локально сойдёт точно
アリテミ
Локально сойдёт точно
Звучит как production ready :D
Konstantin
Звучит как production ready :D
Прод проду рознь, раньше хайлоады были построены хуже чем если сейчас просто композ запустить
Konstantin
А у кого-то до сих пор🙄
アリテミ
Ну так-то да...
pavel
сделал образ FROM node:8-alpine WORKDIR /app COPY package.json /app RUN npm install COPY . /app EXPOSE 8080 залил на гитлаб реджестри когда в компос сую и собираю говорит web_1 | npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json' почему?
pavel
я же его копирую когда образ собираю
Dmitry
я же его копирую когда образ собираю
Так может его как раз и нет по данному пути в момегт билда?
Dmitry
А... Может права надо еще ему дать?
Dmitry
Можно удалить стргки после копирования и провериьь в собранном образе файл и права
Sergey
может не в тему, но гугл ничего не говорит. Кто-то знает как убрать тротл в убунте ? или вообще в линуксе. В гугл все перепробовал, камень сейчас завис на 400мг из 3.2ггц. Все потому что у меня снят кулер