خطای داکر ERROR: for x Cannot start service driver failed programming external connectivity on endpoint starting userland address already in use. Encountered while bringing up the project

امروز با خطای زیر در داکر مواجه شدم:
ERROR: for mariadb Cannot start service mariadb: driver failed programming external connectivity on endpoint xxx-mariadb (4ae610xxxx6564937f07288c50068xxx2b5031d495fbbe085d812b37): Error starting userland proxy: listen tcp4 127.0.0.1:3306: bind: address already in use
ERROR: Encountered errors while bringing up the project.

سرچ کردم گفتم بد نیست برای خودم یاداشتی بذارم. اول تصور میکردم یه سرویسی داره ۲ بار ران میشه ولی هرچی گفتم کدی پیدا نکردم. سرچ که کردم دیدم تو سایت دوست stackoverflow دیدم قبلا هم همین سوال رو داشتم و امتیاز مثبت داده بودم. دلیلش این بود سروریس دیگه ای روی سیستمم داشت از همین پورت استفاده میکرد. ممکنه این اتفاق بدلیل یک کانتینر دیگه هم رخ بده. پس چک کنید کدوم برنامه داره از اون پورت شما استفاده میکنه.

 
 

 

 

رفع خطای داکر Got permission denied while trying to connect to the Docker daemon socket

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json”: dial unix /var/run/docker.sock: connect: permission denied

فقط دستور زیر را اجرا کنید.
sudo chmod 666 /var/run/docker.sock

آموزش مقدماتی داکر Docker انجام نصب و اجرای سلام دنیا – قسمت اول

خب از اونجایی که احتمالا جاهای دیگه سرچ کردید و میدونید داکر چی هست من فرض رو بر این میگیرم که اینجا رو نقطه شروع برای یادگیری داکر میدونید و نه معنی و مفهوم کاریه داکر.

خب بریم سر اصل مطلب. بعد اینکه داکر رو نصب کردید. با دستور `docker –version` میتونیم ورژن داکر خودمون رو ببینیم و با دستور `sudo docker info` اطلاعات کاملی از سیستم و تعداد کانتینر های موجود و ران شده و استاپ شده بدست میاریم.

$ docker --version
Docker version 18.06.1-ce, build e68fc7a

$ sudo docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0

اگه توجه کرده باشین برای گرفتن ورژن از sudo استفاده نکردم ولی برای info از sudo (دسترسی کاربر ارشد) استفاده کردم. برای اجرای دستورات داکر (که پروسه ای رو در پس زمینه ران میکنند) شما باید دسترسی کاربر ارشد رو داشته باشین. توضیح کاملترش میشه اینکه پروسه بکگراند داکر از سوکت یونیکس پورت tcp استفاده میکنه در حالت پیش فرض سوکت یونیکس مالکیتش با کاربر root هست و بقیه کاربرا تنها با استفاده از sudo به اون دسترسی دارن. بنابرین پروسه بکگراند داکر همیشه باید با sudo اجرا بشه. برای این کار یک گروه docker ایجاد میکنیم و کاربر فعلی رو به اون اضافه میکنیم و برای نتیجه حتما یکبار از محیط دستکتاپ خارج میشیم و دوباره وارد میشیم.

$ sudo groupadd docker
$ sudo usermod -aG docker $USER

قدم بعدی اجرای دستور سلام دنیا! یا همون hello-world معروف خودمونه

docker run hello-world

نکته اینکه برای اجرای این دستور چون ایران توسط داکر هم تحریم شده ( بله متاسفانه 😐 ) شما بایستی آی پی سیستمتون رو عوض کنید. راه حلشو برای اوبونتو گذاشتم اخیرا (دور زدن تحریم ها در اوبونتو). برای ویندوز هم هزارتا راه موجوده.
با اجرای این دستور چیز خاصی اتفاق نمیافته. فقط یک صفحه متنی ساده نمایش داده میشه که مطمئن بشیم داکر داره درست کارشو انجام میده.

  1. کلاینت داکر وصل شد به پردازش اصلی داکر (دیمون پردازش هایی که برنامه هارو در پس زمینه زنده نگه میداره… یه جورایی مثل اینکه وقتی تو گوشیتون یه اپ رو میبندین ولی وقتی پیام میاد براتون برنامه پیام رو دریافت میکنه و براتون نوتیفیکیشن میفرسته)
  2. پردازش دیمون داکر ایمیج سلام دنیا رو از داکر هاب گرفت (فکر کنم منظورش اینه یه نسخه از ایمیج رو ایجاد کرده. شبیه همونی که تو برنامه نویسی از یک کلاس یه آبجکت درست میکردیم)
  3. پردازش اصلی کانتینر جدیدی از فایل ایمیج (فایل خام مادر) ایجاد کرده که منجر به پردازشی شده که خروجیش رو این پایین میبینید (منظورش اینه فقط متن رو تولید کرده و هنوز نفرستاده به کلاینت).
  4. پردازش اصلی یا همون دیمون خروجی رو به داکر کلاینت فرستاده که تو عکس زیر میبینید.

در ادامه ۴ دستور ابتدایی اما پرکاربرد رو خلاصه توضیح میدم

docker image ls => لیست همه ایمیج های دریافت شده

docker container ls => لیست همه کانتینتر های در حال اجرا

docker container ls --all => لیست همه کانتینتر ها چه در حال اجرا و چه غیر فعال

docker container ls -aq => فقط آی دی کانتینر ها رو به لیست میکنه (بدرد انجام کارهای گروهی مثل پاک کردن میخوره)