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

    al_gon
    @al_gon
    Когда крутится сервис, то можно и docker service log <сервис> и конктертный контейнер посмотреть
    docker logs <контейнер>

    Если запущен только контейнер, то соотвественно только docker logs <контейнер>

    И естественно при docker service log <сервис> мы можем смотреть на все контейнеры сервиса
    Ответ написан
    Комментировать
  • Можно ли гарантированно защитить приложение от передачи данных при удаленном управлении устройством?

    @rPman
    для android.

    Запрет на доступ к изображения окна приложения это штатные права

    НО! гарантированно - никак, так как при наличии рута все обходится
    Мало того, приложение можно модифицировать, и если процесс установки не проходит под личным контролем заверяющего (на месте, не удаленно), то эти настройки прав убираются и даже root не потребуется.
    Так же, с помощью специального разработанного приложения accessibility (через которые происходит управление приложениями для слепых) можно получить доступ к элементам приложения, кнопкам, тексту и т.п. и автоматически нажимать все необходимые кнопки подтверждения, что так же позволит обойти запреты и предупреждения об этом без наличия рута.

    p.s. для ios та же ситуация с root но скорее всего усилий потребуется больше
    Ответ написан
    1 комментарий
  • В чем суть собирать образ php на ubuntu против php?

    Чтобы уменьшить окончательный размер образа, и тащить только то, что необходимо для работы приложения.
    Если вас полностью устраивает вариант FROM ubuntu - используйте его, тк в нём ещё, в отличие от alpine, используется стандартный glibc, вместо компактного в альпайне.
    Ответ написан
    Комментировать
  • Django & PostgreSQL MemoryError + не правильная работа скрипта?

    @Norkotik
    Реализация понравилась
    try:
    Вся логика
    except:
    pass
    Если эту гомосятину убрать, то смог бы понять где ошибся в логике, а так чему удивляться?
    Ответ написан
    Комментировать
  • Docker: как настроить проксирование?

    vasilyevmn
    @vasilyevmn
    DevOps
    Читать тут:
    https://docs.docker.com/compose/networking/

    Если кратко то добавить в каждый контейнер:
    network:
        - mynetwork


    И прописать эту сеть:
    networks:
      mynetwork:
    Ответ написан
    Комментировать
  • Почему словарь внутри функции ведет себя как глобальная переменная?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Марк Лутц - "Изучаем Python", глава 17 «Области видимости и вложенные функции» и раздел «Типичные ошибки при работе с функциями» в конце.

    Значения по умолчанию для аргументов функции вычисляются и
    запоминаются в момент выполнения инструкции def, а не при вызове
    функции. Внутренняя реализация Python сохраняет по одному объекту для
    каждого аргумента со значением по умолчанию, присоединенного к
    функции.

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

    >>> def saver(x=[]): # Объект списка сохраняется
        ...     x.append(1)  # При каждом вызове изменяется один и тот же объект!
        ...     print(x)
        ...
        >>> saver([2]) # Значение по умолчанию не используется
        [2, 1]
        >>> saver()    # Используется значение по умолчанию
        [1]
        >>> saver()    # Список растет при каждом вызове!
        [1, 1]
        >>> saver()
        [1, 1, 1]


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

    >>> def saver(x=None):
        ...     if x is None: # Аргумент отсутствует?
        ...         x = []    # Создать новый список
        ...     x.append(1)   # Изменить объект списка
        ...     print(x)
        ...
        >>> saver([2])
        [2, 1]
        >>> saver() # Список больше не растет
        [1]
        >>> saver()
        [1]
    Ответ написан
  • Почему супервизор не показывает stdout от скрипта питона?

    вот работающий пример: ( ... правда с переменой пользователя не заморачивался ) :

    Dockerfile
    # supervisor docker example
    FROM jfloff/alpine-python
    RUN apk add --no-cache supervisor && rm -rf /var/lib/apt/lists/*
    RUN sed -i 's/^\(\[supervisord\]\)$/\1\nnodaemon=true/' /etc/supervisord.conf
    RUN mkdir -p /etc/supervisor.d/
    COPY server.py server.py
    COPY agent.conf etc/supervisor.d/agent.ini
    # for server.py
    ARG SERVICE_PORT=8080
    ENV SERVICE_PORT=$SERVICE_PORT
    EXPOSE $SERVICE_PORT
    # NOTE: not ENTRYPOINT
    CMD ["supervisord", "-c", "/etc/supervisord.conf"]

    agent.conf
    [program:server]
    autostart = true
    autorestart = true
    user = root
    environment = PYTHONUNBUFFERED=1
    directory = /
    command = python server.py
    stderr_logfile=/var/log/server.err
    stdout_logfile=/var/log/server.out
    команды

    docker build -t example -f Dockerfile .
    docker rm example_container
    docker run -it --name example_container example

    2020-12-19 18:00:54,578 CRIT Supervisor is running as root.  Privileges were not dropped because no user is specified in the config file.  If you intend to run as root, you can set user=root in the config file to avoid this message.
    2020-12-19 18:00:54,578 INFO Included extra file "/etc/supervisor.d/agent.ini" during parsing
    2020-12-19 18:00:54,588 INFO RPC interface 'supervisor' initialized
    2020-12-19 18:00:54,588 CRIT Server 'unix_http_server' running without any HTTP authentication checking
    2020-12-19 18:00:54,589 INFO supervisord started with pid 6
    2020-12-19 18:00:55,594 INFO spawned: 'server' with pid 8
    2020-12-19 18:00:56,597 INFO success: server entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)


    docker exec -it example_container supervisorctl status server


    server                           RUNNING   pid 8, uptime 0:00:14


    docker exec -it example_container sh

    ls /var/log/
    server.err       server.out       supervisord.log
    
     ps ax |  grep pytho[n]
        6 root      0:00 {supervisord} /usr/bin/python3 /usr/bin/supervisord -c /etc/supervisord.conf
        8 root      0:00 python server.py
    Ответ написан
    Комментировать