Dockerسیستم عامل

docker attach چیست؟

توضیحات docker attach چیست؟

اگر تصمیم داشته باشیم جریانهای ورودی ، خروجی و خطای استاندارد محلی را به یک ظرف (container) در حال اجرا وصل کنیم از داکر اتاچ (docker attach) استفاده خواهیم کرد.

یا به عبارتی دیگر دستور اتصال Docker برای اتصال ترمینال ما به یک ظرف (container) در حال اجرا برای کنترل عملیات ورودی/خروجی استفاده می شود.

استفاده

 docker attach [OPTIONS] CONTAINER

توضیحات گسترده

از docker attach برای اتصال ورودی ، خروجی و خطای پایانه خود (یا هر سه ترکیب) به یک ظرف (container) در حال اجرا با استفاده از شناسه یا نام ظرف (container) استفاده می کنیم که به شما این امکان را می دهد خروجی جاری آن را مشاهده کرده یا به صورت تعاملی آن را کنترل کنید ، گویی دستورات مستقیماً در ترمینال شما اجرا می شوند.

دستورattach خروجی فرایند ENTRYPOINT/CMD را نمایش می دهد.

شما می توانید چندین بار همزمان ، از نشست های مختلف روی میزبان Docker ، به یک فرآیند موجود متصل شوید.

برای توقف یک کانتینر (container) ، از CTRL-c استفاده می شود. این دنباله کلیدیSIGKILL را به کانتینر (container) ارسال می کند اگر --sig-proxy درست باشد (به طور پیش فرض) ، CTRL-c یک SIGINT به کانتینر (container) ارسال می کند. اگر کانتینر (container) با -i و -t اجرا شود، می توانید از یک کانتینر جدا شده و با استفاده از توالی کلیدی CTRL-p CTRL-q آن را در حال اجرا بگذارید.

فرآیندی که به صورت PID 1 در داخل یک کانتینر اجرا می شود به طور خاص توسط لینوکس مدیریت می شود که هرگونه سیگنال را با عملکرد پیش فرض نادیده می گیرد بنابراین، این فرآیند در SIGINT یا SIGTERM خاتمه نمی یابد مگر اینکه برای انجام این کار کدگذاری شده باشد.

تغییر مسیر ورودی استاندارد docker attach هنگام اتصال به یک کانتینر tty-enabled ممنوع است.(یعنی: با -t راه اندازی شد).

در حالی که یک سرویس گیرنده با استفاده از docker attach به کانتینر stdio متصل است ، Docker از یک بافر حافظه 1 مگابایتی برای به حداکثر رساندن توان برنامه استفاده می کند.اگر این بافر پر شود، سرعت اتصال API بر سرعت نوشتن خروجی فرآیند تأثیر می گذارد که این فرایند شبیه برنامه های دیگر مانند SSH می باشد.به همین دلیل ، توصیه نمی شود برنامه های کاربردی حیاتی را که خروجی زیادی را در پس زمینه با اتصال کند سرویس گیرنده ایجاد می کنند اجرا کنید.همچنین، کاربران باید از دستور docker logs برای دسترسی به log ها استفاده کنند.

نادیده گرفتن دنباله جدا شده (detach sequence)

برای نادیده گرفتن دنباله از --detach-keys="<sequence>" همراه دستور docker attach استفاده می کنیم فرمت <sequence> شامل  [a-Z] یا ctrl- ترکیب با موارد زیر باشد:

@ (at sign)

a-z (lower case alphabet)

[ (left bracket)

\\ (two backward slashes)

_ (underscore)

^ (caret)

مقادیر a ، ctrl-a ، X یا ctrl-\\ همه نمونه هایی از توالی های کلیدی معتبر هستند.

گزینه ها

نامپیش فرضشرح
--detach-keysتوالی کلیدی برای جدا کردن (detaching) یک کانتینر را نادیده بگیرید.
--no-stdinDo not attach STDIN
--sig-proxytrueدریافت پروکسی همه سیگنال ها با فرآیند

مثال

به کانتینر در حال اجرا وصل و جدا شوید

docker run -d --name topdemo ubuntu /usr/bin/top -b

$ docker attach topdemo

top - 02:05:52 up  3:05,  0 users,  load average: 0.01, 0.02, 0.05
Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.1%us,  0.2%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    373572k total,   355560k used,    18012k free,    27872k buffers
Swap:   786428k total,        0k used,   786428k free,   221740k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1 root      20   0 17200 1116  912 R    0  0.3   0:00.03 top

 top - 02:05:55 up  3:05,  0 users,  load average: 0.01, 0.02, 0.05
 Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
 Cpu(s):  0.0%us,  0.2%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
 Mem:    373572k total,   355244k used,    18328k free,    27872k buffers
 Swap:   786428k total,        0k used,   786428k free,   221776k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
       1 root      20   0 17208 1144  932 R    0  0.3   0:00.03 top


 top - 02:05:58 up  3:06,  0 users,  load average: 0.01, 0.02, 0.05
 Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
 Cpu(s):  0.2%us,  0.3%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
 Mem:    373572k total,   355780k used,    17792k free,    27880k buffers
 Swap:   786428k total,        0k used,   786428k free,   221776k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
      1 root      20   0 17208 1144  932 R    0  0.3   0:00.03 top
^C$

کد خروجی فرمان container را دریافت کنید

می توانید ببینید کد خروجی که توسط فرآیند bash بازگردانده می شود ، توسط دستور docker attach به تماس گیرنده نیز بازگردانده می شود.

 docker run --name test -d -it debian
$ docker run --name test -d -it debian
275c44472aebd77c926d4527885bb09f2f6db21d878c75f0a1c212c03d3bcfab

$ docker attach test
root@f38c87f2a42d:/#exit 13

exit

$ echo $?
13

$ docker ps -a | grep test
275c44472aeb        debian:7            "/bin/bash"         26 seconds ago      Exited (13) 17 seconds ago                         test

امیدوارم از مقاله docker attach چیست؟ خوشتون اومده باشه.

برای مطالعه مقاله درک محدودیت نرخ Docker Hub بر روی لینک کلیک کنید

امیرحسین باقری

امیرحسین باقری هستم عاشق طراحی سایت در زمینه python و همینطور طراح قالب و متخصص فرانت اند؛ از دانشی که تو این مدت بدست آوردم میشه به: html&css , ,bootstrap, C#, flexbox , sass , javascript , Django,celery,Django channels,DRF,Ruby ,Ruby on Railsاشاره کرد.

دیدگاهتان را بنویسید

دکمه بازگشت به بالا