• Какая разница в логах между контейном и сервисом?

    @Tiasar
    Web Developer
    В сервисе (он доступен только в режиме кластера SWARM) может крутиться несколько контейнеров, допустим у Вас кластер на 3-х машинах, и сервисом описывается что должно быть по контейнеру на каждом узле (deploy: mode: global)
    Соответственно команда отображения логов для сервиса выдаст в одном выводе все логи со всех 3-х контейнеров, отсортированных по времени...
    Ответ написан
    Комментировать
  • Как добавить www-data в alpine образ?

    @Tiasar
    Web Developer
    в alpine группа www-data есть с uid 82
    добавить пользователя можно так:
    adduser www-data -S -H --disabled-password -g "www-data" -h /dev/null -u 82 -G www-data

    Но тогда для пользователя и группы ID будут 82, а в той же ubuntu ID 33

    Я бы сделал по другому. Для обоих образов (nginx и php) добавил бы одинаковые группы и пользователи, скажем www:www с ID - 1010 через Dockerfile:
    RUN addgroup -S -g 1010 www && adduser www -S -H --disabled-password -g "www" -h /dev/null -u 1010 -G www

    ну и в том же Dockerfile указал что запускаться из под этого пользователя:
    USER 1010
    На хост машине тоже бы добавил пользователя и группу с таким же ID

    Ну и в конфигах nginx и php указал бы пользователя www
    Ответ написан
    Комментировать
  • Ошибки при отправки сообщений через SMTP. Yii2?

    @Tiasar
    Web Developer
    Ну как бы ответ в вопросе - 550 not local sender over smtp Нет говорит такого пользователя для SMTP, ковыряйте
    'transport' => [
                    'class' => 'Swift_SmtpTransport',
                    'host' => 'smtp.mail.ru',
                    'username' => 'email',
                    'password' => 'пароль',
                    'port' => '465',
                    'encryption' => 'SSL',
                ]


    username - полный указываете? с доменом? Незнаю как на mail.ru, для акка почты гуголь надо явно указать что можно по SMTP цепляться, это второй вектор где может быть проблема.
    Ответ написан
  • Можно ли Laradock использовать как обычный Docker? Т.е. весь проект упаковать как-то и отдать одним контейнером?

    @Tiasar
    Web Developer
    Создаете docker-compose.yml, прописываете все используемые сервисы и связи между ними и как использовать ими переменные ENV. Для каждого сервиса описанного в docker-compose.yml указываете Dockerfile в котором указываете какой образ использовать + различные инструкции, например git clone Ваших кодов, где скачать скрипты инициализации СУБД (для инициализации базы удобно использовать docker-entrypoint-initdb.d), копирование конфигов в контейнер и прочее...
    Все ваши секретные данные (пароли и прочее) прописываете в .env файле который отдаете заказчику по безопасному каналу связи.
    Ну и все, отдаете заказчику пустой проект, но со всеми прописанными инструкциями в docker-compose.yml и Dockerfile для контейнеров.
    Ответ написан
    2 комментария
  • Как создать свой образ диска с уже примонтированной базой данных?

    @Tiasar
    Web Developer
    Можно sql скрипты с дампами положить в папку docker-entrypoint-initdb.d
    При первом ините контейнера они исполнятся и будет и структура и данные которые Вам нужны
    Ответ написан
    1 комментарий
  • Можно ли запустить 3 приложения в 1м docker?

    @Tiasar
    Web Developer
    Как тут уже написали можно но не нужно, в 99% случаев это так. Но... бывают задачи, например у меня есть один агент написанный на питоне и к нему в довесок нужны filebeat и merticbeat. Можно было бы поднять 3 контейнера, но начинаются шаманства с тем как читать логи и метрики в разрезе процессов в другом контейнере. К тому же, как и у Вас, мне нужно тиражировать агента и ставить в кучу мест, кое где лютые ИБшники закрыли доступ к половине ресурсов интернета, и таскать по 3 образа не удобно, проще все собрать в один и с него поднять за 5 секунд.

    Решается ваша задача достаточно просто, есть такая замечательная вещь как supervisor. Он запускается как основной процесс контейнера, и он, в свою очередь, поддерживает работу 3-х других процессов, перезпуская их в случае краша. Запускается контейнер через docker-compose что гарантирует перезапуск контейнера в случае его краша.

    Делайте так как Вам удобно, один контейнер - один процесс это для большей части типичных задач, но не для всех!
    Ответ написан
    Комментировать
  • Как сделать так, чтобы контейнер Docker был запущен постоянно?

    @Tiasar
    Web Developer
    Контейнер живет ровно столько сколько жив процесс запущенный в нем командой ENTRYPOINT [ "php", "./index.php" ], как только Ваш скрипт index.php завершает работу контейнер останавливается.
    Какую задачу Вы хотите решить? От этого зависит как сделать правильно.
    Ответ написан
    3 комментария
  • Можно ли правила pyparsing записать строкой в переменную?

    @Tiasar Автор вопроса
    Web Developer
    EBNF решение этого вопроса
    Ответ написан
    Комментировать
  • Как подключить файлы разработчика, чтоб при их изменении происходило обновление в контейнере?

    @Tiasar
    Web Developer
    bind mount

    Существуют два способа, позволяющих сделать срок жизни данных большим срока жизни контейнера. Один из способов заключается в использовании технологии bind mount. При таком подходе к контейнеру можно примонтировать, например, реально существующую папку. Работать с данными, хранящимися в такой папке, смогут и процессы, находящиеся за пределами Docker.

    https://m.habr.com/ru/company/ruvds/blog/441574/

    Вот пример:
    https://github.com/deviantony/docker-elk/blob/mast...

    volumes:
          - type: bind
            source: ./elasticsearch/config/elasticsearch.yml
            target: /usr/share/elasticsearch/config/elasticsearch.yml
            read_only: true

    Source путь до файла или папки на хосте
    Target путь в контейнере куда смонтировать
    Readonly для контейнера
    Ответ написан
    Комментировать
  • Как запустить два процесса в Докер контейнере?

    @Tiasar
    Web Developer
    В Dockerfile укажите что необходимо установить supervisor, напишите свой конфиг для него, через него запускайте сколько угодно служб. Вообще философия докера 1 контейнер - 1 процесс. Контейнер живет пока живет процесс. При запуске контейнера можно запустить только 1 процесс.
    Т.е. supervicor и будет этим процессом который не дает закончить работу контейнеру. А все остальные процессы управляются супервизором.
    Ответ написан
    Комментировать
  • Почему не устанавливается Docker?

    @Tiasar
    Web Developer
    Ответ же на виду:
    Sub-process /usr/bin/dpkg returned an error code (1)

    Поиск в гугле
    https://www.google.com/search?q=Sub-process+%2Fusr...

    Сообщение об ошибке «Sub-process /usr/bin/dpkg returned an error code (1)» указывает на проблему с установщиком пакета. Это может произойти в Ubuntu после неудачной установки программного обеспечения или в случае повреждения установщика.


    Вот все варианты решения проблемы:
    https://phoenixnap.com/kb/fix-sub-process-usr-bin-....
    Ответ написан
    Комментировать
  • Docker контейнер не запускается, порт занят, как запустить вторую монгу?

    @Tiasar
    Web Developer
    127.0.0.x это localhost он же loopback , по этому 2 одинаковых порта опубликовать не выйдет. Не имеет значение при этом четвертый актет, это все будет localhost. Вам надо или разные порты под разные экземпляры монги публиковать или иметь на машине разные реальные адреса, для этого Вам надо иметь 2 сетевые карты с разными реальными сетевыми ip адресами.

    Еще вариант, поднять 3 докер с webui (например mongotron.io) все 3 контейнера обеднить сетью docker-compose, тогда они смогут работать каждый со своим портом на выделенном докером адресе, пробросить наружу адрес webui, и управлять монгами через него, далее монги объединить в кластер и мастеру опубликовать порт наружу.
    Ответ написан
    Комментировать
  • Почему супервизор не показывает stdout от скрипта питона?

    @Tiasar Автор вопроса
    Web Developer
    UPD: ошибка в лишней букве - [programm:irp_agent]

    Хммм
    переделал скрипт agent.py
    #!/usr/bin/python3 -u
    
    import sys
    import os
    
    print("test error", file=sys.stderr)
    if not os.path.isdir("/home/irp_agent/test"):
    	os.mkdir("/home/irp_agent/test")

    Если запустить ручками, папка создается. Если через супервизор то нет, значит скрипт вовсе не запускается... В чем может быть дело?

    Журнал супервизора тоже пуст

    root@993db16619ec:/# cat /var/log/supervisor.log
    2020-12-19 11:13:27,281 INFO Set uid to user 0 succeeded
    2020-12-19 11:13:27,284 CRIT Server 'unix_http_server' running without any HTTP authentication checking
    2020-12-19 11:13:27,284 INFO supervisord started with pid 10
    Ответ написан
  • Как из getmail передать письмо скрипту python?

    @Tiasar Автор вопроса
    Web Developer
    Похоже понял, надо читать stdin
    Ответ написан
    Комментировать
  • Как отключить сессию в модуле?

    @Tiasar Автор вопроса
    Web Developer
    Разобрался, сессию запускал кастомный UrlManager менеджер - codemix\localeurls\UrlManager
    Ответ написан
    Комментировать
  • Почему Yii2 создает на сервере кучу сессий с __flash|a:0:{}?

    @Tiasar
    Web Developer
    У меня схожая проблема была из-за кастомного UrlManager менеджера - codemix\localeurls\UrlManager, он стартовал сессии
    Ответ написан
    Комментировать
  • Как настроить показ полей API YII2?

    @Tiasar
    Web Developer
    А может проще сделать через связывание моделей и гетеры? Привели бы коды своих моделей...
    Ответ написан
    Комментировать
  • Почему не срабатывает правило валидации integer?

    @Tiasar Автор вопроса
    Web Developer
    Большое спасибо! Я немного тупой :D Все прекрасно заработало при
    $model->load(Yii::$app->request->post()) && $model->validate()
    Ответ написан
    Комментировать
  • Что не так с фильтрами Elasticsearch?

    @Tiasar Автор вопроса
    Web Developer
    Вот так все работает на elasticsearch версии 6.0.0
    {
      "query": { 
        "bool": { 
          "must": {
            "wildcard": {
              "keywords": {
                "value": "автобус*",
                "boost":2
              }
            }
          },
          "filter": [ 
            { "terms":  { "category_id": [33, 35] }}, 
            { "range": { "access_index": { "lte": 30 }}} 
          ]
        }
      }
    }
    Ответ написан
    Комментировать
  • Как правильно искать в elasticsearch с фильтрацией по аттрибутам?

    @Tiasar Автор вопроса
    Web Developer
    Вот так все работает на elasticsearch версии 6.0.0
    {
      "query": { 
        "bool": { 
          "must": {
            "wildcard": {
              "keywords": {
                "value": "автобус*",
                "boost":2
              }
            }
          },
          "filter": [ 
            { "terms":  { "category_id": [33, 35] }}, 
            { "range": { "access_index": { "lte": 30 }}} 
          ]
        }
      }
    }
    Ответ написан
    Комментировать