docker/compose tasvir konteyneri allaqachon bog'langan port tufayli xizmatni ishga tushirmaydi

Menda quyidagi sozlamalar mavjud:

1-chi mashina. Github integratsiyasiga ega Docker serveri.

2-mashina. Docker-agent yordamida ishlab chiqarish shu tarzda boshlanadi:

docker run -d 
    -e DRONE_SERVER=<ip:host>
    -e DRONE_SECRET=<secret> 
    -v /var/run/docker.sock:/var/run/docker.sock 
    --restart=always 
    --name=drone-agent
      drone/agent:0.8 agent

Quyidagi .drone.yml bilan repo:

pipeline:
  run:
    image: docker/compose:1.21.2
    commands:
      - cd <dir_with_docker-compose.yml>
      - docker-compose up -d <service_name>
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    when:
      branch: [<branch_name>]

shuning uchun men ushbu .drone.yml bilan qurishni ishga tushirganimda, men quyidagi natijani olaman:

cd <dir_with_docker-compose.yml>
docker-compose up -d <service_name>
Starting docker_<service_name>_1 ...
Starting docker_<service_name>_1 ... error

ERROR: for docker_<service_name>_1  Cannot start service <service_name>: driver failed programming external connectivity on endpoint docker_<service_name>_1 
(<hash>): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use

ERROR: for <service_name>  Cannot start service <service_name>: driver failed programming external connectivity on endpoint docker_<service_name>_1
(<hash>): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use
Encountered errors while bringing up the project.

Lekin cd <dir_with_docker-compose.yml> va docker-compose up -d <service_name> orasiga docker ps yoki netstat -tulpn kiritsam, xizmat muvaffaqiyatli ishga tushadi.

Nima uchun bu sodir bo'ladi?


person IgorNikolaev    schedule 10.07.2018    source manba


Javoblar (1)


Xato xabari bu portdan boshqa narsa allaqachon foydalanayotganligini bildiradi. Ko'rib chiqilayotgan port 80 ga o'xshab ko'rinsa, men sizda veb-server ishlayotganini taxmin qilaman. Qaysi dasturlar portdan foydalanayotganini aniqlashning ko'plab usullari mavjud (agar u docker konteyneri bo'lsa, docker ps -a sizga ko'rsatishi kerak), men ulardan birini sinab ko'raman va buzilish jarayonini o'chirib qo'yaman, keyin docker tizimini qayta ishga tushirib ko'ring. Agar xatolik yo'qolsa, siz aybdorni aniqladingiz.

Men sizning docker rasmlaringizda aniq nima ekanligini bilmayman, lekin ular bir-biriga zid bo'lishi mumkin. Menimcha, Docker avtomatik ravishda rasmlarga tasodifiy bepul portni tayinlaydi, lekin port ko'rsatilmagan bo'lsa. Shunday qilib, agar sizning yig'ilishingizdagi bir nechta konteyner 80 ni bog'lashga harakat qilsa, bu muammo bo'ladi. Kimdir 80 dan foydalanayotganligini bilish uchun Dockerfiles va docker compose-ni diqqat bilan ko'rib chiqaman. Siz Dockerdan konteynerni docker run -p 12345 CONTAINER_NAME bilan ixtiyoriy portga ulashni so'rashingiz mumkin. Sizning ishga tushirish buyrug'ingizda -e DRONE_SERVER=<ip:host> bor, lekin IIRC bu muhit o'zgaruvchisini o'rnatadi, shuning uchun Docker siz ko'rsatgan portga e'tibor bermasligi mumkin. Shunday qilib, siz bajarayotgan barcha ishga tushirish buyruqlari uchun -p 12345 kabi argumentni qo'shing (har bir konteyner uchun boshqa raqamdan foydalaning) va shuningdek, docker-compose.yml portlarini o'zgartiring. Agar bu muammoni hal qilsa, avval qaysi konteynerlar -p 80 bilan ishlayotganini yoki docker kompozitsiyasida 80-port ko'rsatilgan joyni qidiring.

E'tibor bering, agar siz tasodifan bir xil Docker tasvirini ikki marta ishga tushirishga harakat qilsangiz, yangi namuna eskisiga zid bo'ladi, chunki ular ikkalasi ham bir xil portdan foydalanishga harakat qiladilar (agar hech qanday port ko'rsatilmagan bo'lsa, u holda Docker buni qila oladi) ziddiyatni avtomatik ravishda hal qilish uchun). Men docker_<service_name>_1 (xususan, _1) ni ko'rayotganim sababli, siz ushbu sozlamada docker-compose run ni allaqachon bajarganingizdan shubhalanaman, uni olib tashlashni unutib qo'ydingiz va qayta ishga tushirdingiz. Asosan, ushbu docker tuzish bilan bog'liq barcha konteynerlarni yopishingiz va ularni olib tashlashingiz kerak. Porttainer kabi grafik interfeysi bunga yordam berishi mumkin.

person Wassinger    schedule 10.07.2018
comment
dron-agent masofaviy dron-server bilan aloqa o'rnatmoqda. drone-server 9000 ta portni tinglayapti va docker-agent 3000 portni ochmoqda. Qurilish jarayonida men faqat bitta konteyner yarataman, shuning uchun docker-compose xizmatlari o'rtasida portlarda ziddiyatlar bo'lmasligi kerak. Mo''jiza shundaki, docker ps yoki netststat -tulpn portni ulash bilan muammoni hal qiladi - person IgorNikolaev; 11.07.2018
comment
@IgorNikolaev Kutib turing, ba'zi bir holatni chop etish uni tuzatadimi? - person Wassinger; 14.07.2018
comment
@IgorNikolaev Bu juda g'alati, lekin uni tuzatganingiz bilan tabriklayman. - person Wassinger; 14.07.2018
comment
yaxshi, men buni tuzatilgan deb hisoblamayman :) (shunday qilib) - person IgorNikolaev; 14.07.2018