Intereting Posts
Доступ к install.php, если присутствует install.php, иначе index.php Не удалось установить php_value ‘soap.wsdl_cache_dir’ возможно ли запустить JSLint в качестве командной строки в windowsх с помощью node.js? Поддомены Rails 4 не работают на производстве Как установить переменную среды в PHP с помощью Apache / FastCGI? .htaccess: перенаправить все страницы, кроме одного Встроить kernel ​​dotnet (.NET Core) в собственные приложения на Windows / Linux При каких обстоятельствах контроль переходит из пользовательского пространства в пространство ядра Linux? Загрузка файла Parse напрямую без записи в файловую систему Почему файл maven settings.xml отсутствует? Как решить пакет com.sun.org.apache.xml.internal.security не существует в приложении netbean javafx .htaccess перенаправлять с помощью параметра множественного запроса BlazeDS через HTTPS Как эхо> char в партии Только сценарий воспроизведения Ошибка: объект httpclient не является членом пакета org.apache.commons

прикреплять dockerы vs lxc-attach

UPDATE: Docker 0.9.0 теперь использует libcontainer, отвлекаясь от LXC, смотрите: Присоединение к контейнеру libcontainer Docker

Я использую istance elasticsearch:

docker run -d -p 9200:9200 -p 9300:9300 dockerfile/elasticsearch 

Проверка процесса выглядит следующим образом:

 $ docker ps --no-trunc CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 49fdccefe4c8c72750d8155bbddad3acd8f573bf13926dcaab53c38672a62f22 dockerfile/elasticsearch:latest /usr/share/elasticsearch/bin/elasticsearch java About an hour ago Up 8 minutes 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp pensive_morse 

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

 $ sudo docker attach 49fdccefe4c8c72750d8155bbddad3acd8f573bf13926dcaab53c38672a62f22 [sudo] password for lsoave: 

tty не подключается, и запрос не возвращается. То же самое с lxc-attach работает нормально:

 $ sudo lxc-attach -n 49fdccefe4c8c72750d8155bbddad3acd8f573bf13926dcaab53c38672a62f22 root@49fdccefe4c8:/# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 49 20:37 ? 00:00:20 /usr/bin/java -Xms256m -Xmx1g -Xss256k -Djava.awt.headless=true -XX:+UseParNewGC -XX:+UseConcMa root 88 0 0 20:38 ? 00:00:00 /bin/bash root 92 88 0 20:38 ? 00:00:00 ps -ef root@49fdccefe4c8:/# 

Кто-нибудь знает, что случилось с прикреплением dockerов?

NB. dockerfile / elasticsearch заканчивается:

 ENTRYPOINT ["/usr/share/elasticsearch/bin/elasticsearch"] 

Вы прикрепляетесь к контейнеру, на котором выполняется elasticsearch который не является интерактивной командой. Вы не получите оболочку для ввода, потому что в контейнере не работает shell. Причина работы lxc-attach заключается в том, что она дает вам оболочку по умолчанию. На человека lxc-attach :

Если команда не указана, текущая shell по умолчанию пользователя, использующего lxc-attach, будет просматриваться внутри контейнера и выполняться. Это не удастся, если такой пользователь не существует внутри контейнера или контейнер не имеет рабочего механизма nsswitch.

docker attach ведет себя как ожидалось.

Как отмечает Бен Уэйли, это ожидаемое поведение. Стоит отметить, что если вы хотите контролировать процесс, вы можете сделать несколько вещей:

  • Начать bash как передний процесс: например, $ES_DIR/bin/elasticsearch && /bin/bash предоставит вам вашу оболочку при ее прикреплении. В основном полезно при разработке. Не очень чистый 🙂
  • Установите ssh-сервер. Хотя я никогда не делал этого сам, это хороший вариант. Недостаток, конечно, над головой и, возможно, угол безопасности. Вы действительно хотите ssh на всех своих контейнерах? Лично мне нравится держать их как можно меньше с одиночным процессом как конечной победой.
  • Используйте файлы журнала! Вы можете использовать docker cp чтобы локально регистрировать журналы, или лучше, чтобы docker logs $CONTAINER_ID команду docker logs $CONTAINER_ID . Последний дает вам накопленный вывод stdin / stderr для времени жизни контейнера каждый раз.
  • Установите каталог журнала. Просто установите каталог на своем хосте и попросите elasticsearch записать в файл журнала в этом каталоге. У вас может быть syslog на вашем хосте, Logstash или все, что вас приглашает;). Конечно, недостатком здесь является то, что вы теперь используете свой хост больше, чем вам может понравиться. Я также нашел хороший эксперимент, используя logstash в этом блоге .

FWIW, теперь, когда выпущен Docker 1.3, вы можете использовать «docker exec», чтобы открыть оболочку или другой процесс в запущенном контейнере. Это должно позволить вам эффективно заменить lxc-attach при использовании собственного драйвера.

http://blog.docker.com/2014/10/docker-1-3-signed-images-process-injection-security-options-mac-shared-directories/