ჰოსტის პროქსიზე წვდომა Docker-ის bridge კონტეინერიდან
აირჩიეთ კონტეინერიდან ხელმისაწვდომი პროქსის მისამართი და განასხვავეთ საჯარო წერტილი Docker-ის ჰოსტზე მომუშავე პროქსისგან.
ჩვეულებრივი bridge ქსელის კონტეინერში 127.0.0.1 თვითონ კონტეინერის loopback მისამართია. ლეპტოპის localhost-ზე მსმენელი პროქსი ავტომატურად ყველა კონტეინერში არ უსმენს.
ეს ხსნის გავრცელებულ განსხვავებას: პროქსის იგივე URL ჰოსტის ტერმინალში მუშაობს, მაგრამ კონტეინერში კავშირი უარყოფილია. მისამართი თითოეულ ადგილას ქსელის სხვადასხვა საბოლოო წერტილს აღნიშნავს.
საჯარო პროქსის გამოყენება პირდაპირ შეიძლება
თუ სერვისიდან ან HTTP პროქსების სიიდან არჩეული წერტილი ნამდვილად ხელმისაწვდომი საჯარო IP-ია, ეს მისამართი გადასცით აპლიკაციას, localhost-ად გადაკეთების ნაცვლად:
docker run --rm \
-e HTTP_PROXY=http://203.0.113.10:8080 \
-e HTTPS_PROXY=http://203.0.113.10:8080 \
your-image
შეცვალეთ დოკუმენტაციის მაგალითის მისამართი და იმიჯი. იმიჯის პროგრამას კვლავ უნდა ჰქონდეს ამ გარემოს ცვლადების მხარდაჭერა; Docker მხოლოდ ცვლადების არსებობის გამო ყველა სოკეტს პროქსით გაგზავნილ მოთხოვნად არ აქცევს.
თუ პროქსი Docker-ის ჰოსტზე მუშაობს
Docker Desktop ჰოსტის შიდა მისამართზე წვდომისთვის იძლევა host.docker.internal-ს. მხარდაჭერილ ადგილობრივ Engine კონფიგურაციაში ჰოსტის შესაბამისობამ შეიძლება ეს მიღებული სახელი უზრუნველყოს:
docker run --rm \
--add-host host.docker.internal=host-gateway \
-e HTTP_PROXY=http://host.docker.internal:8080 \
-e HTTPS_PROXY=http://host.docker.internal:8080 \
your-image
ეს სახელის ამოხსნას ცვლის; პორტის გადამისამართების ბრძანება არ არის. ადგილობრივ Linux-ზე მხოლოდ ჰოსტის loopback-ზე მიბმული სერვისი შეიძლება კვლავ მიუწვდომელი იყოს ჰოსტის bridge მისამართიდან. მსმენელმა, ფაირვოლმა და კონტეინერის მარშრუტმა ეს კავშირი უნდა დაუშვან. მსმენელის შეცვლისას წვდომა შეზღუდეთ საჭირო კლიენტებით, ავთენტიფიკაციის გარეშე ღია პროქსის შექმნის ნაცვლად.
შეამოწმეთ იქიდანვე, საიდანაც აპლიკაცია მუშაობს
ჰოსტზე მიღებული curl შედეგი მხოლოდ ჰოსტის მარშრუტს ამოწმებს. შესაბამისი მოთხოვნა კონტეინერის გარემოდან გაგზავნეთ და შეამოწმეთ, აღწევს თუ არა სასურველ წერტილს.
„ჰოსტი“ ასევე ნიშნავს მანქანას, რომელზეც Docker Engine მუშაობს. დისტანციური Engine-ის შემთხვევაში ეს აუცილებელი არ არის თქვენი ლეპტოპი იყოს. ამიტომ ადგილობრივი დესკტოპის აპლიკაციიდან დაკოპირებული loopback IP-ის უცვლელად მუშაობა დისტანციურ ამწყობზე ან სერვერზე განსაკუთრებით ნაკლებად სავარაუდოა.
იმიჯის ჩამოტვირთვის პრობლემები ცალკე განიხილეთ: დემონი იმიჯს ჩამოტვირთავს მანამდე, სანამ აპლიკაცია ზემოთ ნაჩვენებ გარემოს გამოიყენებს.