
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-stdin | Do not attach STDIN | |
--sig-proxy | true | دریافت پروکسی همه سیگنال ها با فرآیند |
مثال
به کانتینر در حال اجرا وصل و جدا شوید
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 بر روی لینک کلیک کنید