Ответы пользователя по тегу Docker
  • Чьи права примонтированной папки в докер? Контейнера или хоста?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это точно один и тот же файл? Можно сделать stat на файл в системе и отдельно в контейнере, зайдя в него по docker exec. Если inode у файла разный - это разные файлы. Возможно, с пробросом в докер что-то напутано.

    Как называется пользователь зависит от содержимого файла /etc/passwd, который в контейнере и на хосте разные. Пользователь в Linux идентифицируется по uid - это просто числовой идентификатор. Соответственно, uid=0 это root, теоретически его можно переименовать, но так никто не делает.
    Ответ написан
    Комментировать
  • Как исправить .OSError: [Errno 22] Invalid argument при docker-compose up?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В Windows используется COMPOSE_PATH_SEPARATOR=';', но это можно переопределить через env.

    Кроме того, в Windows компоненты пути разделяются обратным слешом, поэтому в данном случае docker-compose решил, что в COMPOSE_FILE одно имя файла, лежащего в текущем каталоге.
    Ответ написан
    Комментировать
  • Как сделать чтобы оба процесса в docker containere писали в stdout, если оба запускаются через entrypoint?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Открываем man по freshclam и видим:

    --stdout
        Write all messages to stdout.
    Ответ написан
    Комментировать
  • Как докер работает с логами?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Докер удаляет наиболее старые записи из лога.
    Ответ написан
  • Почему не хватает места докеру?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Докер скачивает fslayer в виде архива, который потом распаковывает. Неудивительно, что ему нужно больше места.
    Ответ написан
    Комментировать
  • Как сохранить docker контейнер?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Два способа:

    1. Загрузить в docker registry (свой или чужой), в публичный docker hub и брать оттуда.

    2. Сохранить образ в архив, скопировать на новое место и там загрузить:

    docker save -o image.tar imagename1:latest imagename2:3.1415926
    docker load -i image.tar
    Ответ написан
    Комментировать
  • Смена дефолтного порта portainer(9000) в docker-compose?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    ports:
          - 9001:9000


    Порт внутри контейнера не меняется.
    Ответ написан
    2 комментария
  • Можно ли запустить Docker если ноутбук не поддерживает виртуализацию?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    На Linux докер не использует виртуализацию, только namespaces/cgroups. На винде - увы...

    Советую также убедиться, что виртуализация действительно прям не поддерживается, а не просто выключена в настройках BIOS, как часто бывает.
    Ответ написан
    5 комментариев
  • Запуск tor при старте контейнера(на базе Alpine)?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    rc-update управляет системными сервисами, которые запускаются процессом init, запускаемым при старте системы. В контейнере же обычно запускается ровно одна программа, никакой инициализации системы с запуском кучи процессов не происходит. Так что надо запустить tor вручную. Ещё иногда внутри контейнеров используют лёгкие системы запуска сервисов типа runit, но ради одного tor разбираться с этим как-то жирно.

    tor нужно запустить в режиме демона, чтобы после его запуска можно было запустить что-то ещё. Например, сделать скрипт, в котором запустить tor и сразу же нужное:

    команда_запуска_tor >/dev/null 2>&1 &
    команда_запуска_моего_приложения


    Этот скрипт положить внутрь контейнера и использовать вместо изначальной команды.

    Но это всё не docker-way. Красиво и по феншую запустить tor отдельным контейнером.
    Ответ написан
  • Asyncpg в Docker - почему может падать с ошибкой No Route To Host, если route точно есть?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нужно описать доступ из одного контейнера в другой с помощью links в docker-compose.yml. Сейчас доступ режется докером.
    Ответ написан
  • Как docker-compose заставить ходить через прокси?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ну, для начала, переменная для wget должна называться http_proxy, а не HTTP_PROXY...

    Потом, лучше её задавать для конкретного контейнера, а не для всего докера. Если это нужно в процессе сборки контейнера - указывать в Dockerfile через ARG (не через ENV).
    Ответ написан
    Комментировать
  • Docker доступ в интернет через другой контейнер?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если нужно завернуть трафик не через обычный шлюз в штатной докер-сети, а через один из контейнеров, то это с помощью системы подпорок и растяжек таки можно сделать.

    1. В конфигурацию контейнеров добавить:

    cap_add:
      - NET_ADMIN


    Это необходимо, так как по умолчанию внутри контейнера нельзя конфигурировать сеть. Ну и redsocks, скорее всего, без этого может не заработать.

    2. В скрипте внутри первого контейнера или в entrypoint добавить прописывание роута:

    ip route replace default via IP_другого_контейнера

    IP второго контейнера лучше зафиксировать. Либо, как вариант, узнавать его через dig (тут контейнер имеет имя router, и нужно через параметр links разрешить к нему доступ):

    ip route add default via `dig +short router`

    3. В контейнере-роутере надо настроить nat и форвардинг. Примерно так:

    sysctl -w net.ipv4.ip_forward=1
    iptables -t nat -A POSTROUTING -s 172.18.0.0/24 -j MASQUERADE


    Тут можно тоже какими-нибудь командами угадать нужную сетку, чтобы не завязываться на фиксированные IP. Например, так:

    network=$(ip route list|grep scope\ link|cut -d ' ' -f 1)


    Ну а вообще такие манипуляции - вряд ли хорошая практика. Лучше сразу закладывать в разрабатываемом софте нативную работу через прокси, если это необходимо.
    Ответ написан
  • Иногда внутри докера запросы выполняются по несколько секунд, почему так происходит?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Судя по симптомам, в докере тормозит DNS. При использовании Session IP проверяется один раз и потому проблем нет, а без сессий IP запрашивается при каждом запросе.
    Ответ написан
    Комментировать
  • Крупная БД на docker?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Не надо использовать дата-контейнеры, это изначально плохая практика, спорная даже в тех редких случаях, когда их всё же используют.

    Дата-контейнеры использовали во времена, когда ещё не завезли пользовательских volume в докер, тогда типичным способом создания такого, не принадлежащего явно ни одному "тяжёлому" контейнеру", было создание лёгкого ничего не делающего контейнера, от оторого все тянули данные к себе.

    Сейчас же просто делаешь volume и всё. Но для базы данных нет никакого смысла делать volume, проще и надёжнее пробросить физический каталог.
    Ответ написан
    Комментировать
  • Как организовать сеть контейнеров Docker?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Не нужно из контейнера пытаться создавать другие контейнеры! (Да, технически это можно, но непросто, и новичкам полезнее вообще не знать о такой возможности, чтобы избежать ненужных искушений) Их надо создавать непосредственно с хоста. Самый простой способ оркестрации - docker-compose. В одном файле пишутся описания всех контейнеров со связями между ними, потом всё это запускается одной командой. В официальной документации и в интернетах полно информации и примеров.
    Ответ написан
  • Почему не читает python файл ( /bin/sh: 1: [python,: not found) в docker?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    У CMD есть 3 формы:

    1. CMD ["executable","param1","param2"] - тут надо полный путь к executable
    2. CMD ["param1","param2"] - тут это параметры ENTRYPOINT
    3. CMD command param1 param2 - тут это просто команда для shell

    Судя по ошибке, используется третья(!) форма, shell выкусывает кавычки и остаётся:

    [python, app.py]

    Жырным показал реальное имя команды, которая передаётся в shell.

    Почему так? А вот не знаю. Старый докер?

    У меня тест с такими исходными данными был успешен, несмотря на то, что версия у меня не сказать чтобы новая (17.05.0-ce).

    spoiler
    shurik@ubuntu ~/dockers/test2 $ docker build -t pythontest .
    Sending build context to Docker daemon  3.072kB
    Step 1/5 : FROM python:3.6
     ---> 2dfb6d103623
    Step 2/5 : RUN mkdir -p /usr/src/app/
     ---> Running in 09f00e2cd7c0
     ---> f7bf180ffc62
    Removing intermediate container 09f00e2cd7c0
    Step 3/5 : WORKDIR /usr/src/app/
     ---> a35eb6c2b4d2                                                                                                                                                                                                                                                            
    Removing intermediate container 28981d13a074                                                                                                                                                                                                                                  
    Step 4/5 : COPY . /usr/src/app/                                                                                                                                                                                                                                               
     ---> bf2cafb07143                                                                                                                                                                                                                                                            
    Removing intermediate container 0553c72905cb                                                                                                                                                                                                                                  
    Step 5/5 : CMD python app.py                                                                                                                                                                                                                                                  
     ---> Running in 0e57967e6d8f                                                                                                                                                                                                                                                 
     ---> 5157a21343e9                                                                                                                                                                                                                                                            
    Removing intermediate container 0e57967e6d8f                                                                                                                                                                                                                                  
    Successfully built 5157a21343e9                                                                                                                                                                                                                                               
    Successfully tagged pythontest:latest                                                                                                                                                                                                                                         
    shurik@ubuntu ~/dockers/test2 $ docker run -it --rm pythontest                                                                                                                                                                                                                
    hello world                                                                                                                                                                                                                                                                   
    shurik@ubuntu ~/dockers/test2 $
    Ответ написан
    Комментировать
  • Как зафорвардить трафик в докере?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Самое простое решение:

    docker run -p 9090:9090 --network=container:vpn-client-container 6d51b6be9afb awsemo-app


    - оба контейнера будут использовать один и тот же сетевой стек и общий IP.
    Ответ написан
  • Ubuntu snap и раздвоение docker – где мои контейнеры?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Поздравляю, теперь в системе два докера, которые претендуют на /run/docker.sock. Можно посмотреть, что вернёт docker info, там будет /var/snap/docker/common/var-lib-docker вместо /var/lib/docker

    Сомневаюсь что дело в livepatch, у меня поставился без docker. Так что советую удалить snap docker и рестартнуть обычный docker.
    Ответ написан
    Комментировать
  • Могу ли я использовать Docker CE в комерческом проекте?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Без вопросов. Никто же не мешает запускать комерческий софт в системах с ядром Linux (GPL2), например?
    Ответ написан
    Комментировать
  • Raspbian виснет при перезагрузке системы с запущенным Docker контейнером, почему?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Советую попробовать остановить весь докер и убедиться, что без него нормально рестарт проходит. Если нет, то возможно докер и не виноват.

    Вообще бывают у докера проблемы с aufs и devicemapper, но тут используется overlayfs2.
    Ответ написан
    Комментировать