to set break-point inside kolla container's code and to use pdb outside of it
에는 다음과 같은 내용이 적혀있다.
this url says following:
그럼, 해보자
then, let's try it.
container image 안에는 remote-pdb와 socat등이 이미 설치되어 있었다.
I found that remote-pdb and socat are already installed.
[root@tkim-rocky4 opt]# docker exec -ti horizon /bin/bash
(horizon)[root@tkim-rocky4 /]# pip freeze | grep pdb
remote-pdb==1.2.0
(horizon)[root@tkim-rocky4 /]# which socat
/usr/bin/socat
nova-api등은 번거로우므로 horizon의 코드에 breakpoint를 걸어보았다. 적당히 로그인 하는 폼을 보여주는 파일에 break point 작성했다.
for *-apis are sort of cumbersome, I chose horizon service to test. I added a couple of lines to create a break point at
/var/lib/kolla/venv/lib/python2.7/site-packages/openstack_auth/forms.py
class Login(django_auth_forms.AuthenticationForm):
....
use_required_attribute = False
region = forms.ChoiceField(label=_("Region"), required=False)
username = forms.CharField(
label=_("User Name"),
widget=forms.TextInput(attrs={"autofocus": "autofocus"}))
password = forms.CharField(label=_("Password"),
widget=forms.PasswordInput(render_value=False))
# from here
from remote_pdb import RemotePdb
RemotePdb('127.0.0.1', 4444).set_trace()
# to here
def __init__(self, *args, **kwargs):
super(Login, self).__init__(*args, **kwargs)
...
저장하고 container를 재시작
saved file and restarted the container.
[root@tkim-rocky4 opt]# docker restart horizon
horizon
[root@tkim-rocky4 opt]#
브라우저로 dashboard에 접속하면 페이지가 waiting 상태로 열리지 않는다. http://{가상머신 IP}/
tried to open dashboard url http://{virtual machine IP}/ with a internet browser but it keeps 'waiting' status.
이때 가상머신 안에서 socat readline tcp:127.0.0.1:4444
을 실행하면 pdb 프롬프트가 뜬다.
( 가상머신 안에서 컨테이너의 포트에 직접 접근이 가능한 것은 현재 Linux뿐이다. Mac과 Windows의 docker container는 제약이 있어서 안된다. )
if you run socat readline tcp:127.0.0.1:4444
on the virtual machine, you can see pdb prompt.
( use Linux to access container with port directly. 'docker for Mac' and 'docker for Windows' lags for some constraints. )
where
커맨드로 어디에서 멈추었는 지 확인하면 forms.py에 멈추어 있는 것을 확인할 수 있다.
where
command shows where instruction point locates now.
-> res = instance.__dict__[self.name] = self.func(instance)
/var/lib/kolla/venv/lib/python2.7/site-packages/django/urls/resolvers.py(398)urlconf_module()
-> return import_module(self.urlconf_name)
/usr/lib64/python2.7/importlib/__init__.py(37)import_module()
-> __import__(name)
/var/lib/kolla/venv/lib/python2.7/site-packages/openstack_dashboard/urls.py(53)<module>()
-> urlpatterns.append(url(r'^auth/', include(u)))
/var/lib/kolla/venv/lib/python2.7/site-packages/django/conf/urls/__init__.py(50)include()
-> urlconf_module = import_module(urlconf_module)
/usr/lib64/python2.7/importlib/__init__.py(37)import_module()
-> __import__(name)
/var/lib/kolla/venv/lib/python2.7/site-packages/openstack_auth/urls.py(17)<module>()
-> from openstack_auth import views
/var/lib/kolla/venv/lib/python2.7/site-packages/openstack_auth/views.py(33)<module>()
-> from openstack_auth import forms
/var/lib/kolla/venv/lib/python2.7/site-packages/openstack_auth/forms.py(31)<module>()
-> class Login(django_auth_forms.AuthenticationForm):
> /var/lib/kolla/venv/lib/python2.7/site-packages/openstack_auth/forms.py(61)Login()
-> def __init__(self, *args, **kwargs):
(Pdb)
자, 컨테이너 내부의 디버깅을 컨테이너 바깥에서 pdb를 사용해서 할 수 있다.
Now, you know how to debug container's code outside of it.
필요없거나 원래환경으로 되돌리려면, 작성된 instance를 지우고, kolla-ansible을 초기화 하고 다시 환경을 만든다.
if you want to reset the environment, delete instances created before and use kolla-ansible
command.
$ nova delete demo1
$ kolla-ansible destroy --yes-i-really-really-mean-it
$ cd /opt && kolla-ansible -i all-in-one bootstrap-servers && kolla-ansible -i all-in-one prechecks && kolla-ansible -i all-in-one deploy && kolla-ansible post-deploy && source /etc/kolla/admin-openrc.sh && source /usr/share/kolla-ansible/init-runonce
다음에는 pycharm IDE를 설치해 docker 서버 리모트 디버깅을 해보자.
next time, I'd like to talk about pycharm IDE remote debugging with docker server connection.
Author And Source
この問題について(to set break-point inside kolla container's code and to use pdb outside of it), 我々は、より多くの情報をここで見つけました https://qiita.com/crowdy/items/dc2654dc83c96dcb937e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .