Docker Error bind: adres zaten kullanımda


94

docker-compose upDocker projemde çalıştırdığımda aşağıdaki mesajla başarısız oluyor:

Error starting userland proxy: listen tcp 0.0.0.0:3000: bind: address already in use

netstat -pna | grep 3000 şunu gösterir:

tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      -  

Zaten denedim docker-compose downama yardımcı olmadı.


7
Dinleyen sudo netstat -pna | grep 3000süreci elde etmek için a çalıştırın .
BMitch

2
Çıktınız başka bir işlemin 3000 numaralı bağlantı noktasını dinlediğini gösteriyor. Başka bir bağlantı noktası kullanabilir misin? sudoİşlem adını görmeyi deneyin .
techtabu

Evet, bu limanda artık yok. Thanx! sudoÇıktıyı değiştirebileceğini bilmiyordum :)
Ngoral

Benim için liman 8888, liman vekili
Neil McGuigan

Yanıtlar:


92

Sizin durumunuzda, bağlantı noktasını kullanan başka bir işlemdi ve yorumlarda belirtildiği gibi sudo netstat -pna | grep 3000, sorunu çözmenize yardımcı oldu.

Diğer durumlarda (kendimle birçok kez karşılaştım) çoğunlukla başka bir durumda çalışan aynı konteynerdir. Bu durumda docker ps, aynı konteynerleri başka dizinlerde çalışır halde bıraktığım ve daha sonra aynı konteyner adlarının kullanıldığı başka yerlerde tekrar çalıştırmayı denediğim için çok yardımcı oldu.

docker psBana nasıl yardımcı oldu: docker rm -f $(docker ps -aq) tüm kapsayıcıları kaldırmak için kullandığım kısa bir komut.

Düzenleme:docker ps Bana nasıl yardımcı olduğu eklendi .


3
Aslında bu problemi sık sık yaşıyorum. Ve hiçbir şey, ama docker-compose downyardım eder
Ngoral

Çalıştırdığınız dizinde çalıştırmanız şartıyla, bu kesinlikle yardımcı olacaktır docker-compose up. Cevabımda, halihazırda çalışan kabı bulmanızı ve istenen işlemi yapmanızı öneririm. Biri çıkarmak istemiyorsa, onları kaldırmak için uygun hissettim, o zaman durdurmak için rmkullanmak var stop.
Ayushya

1
tensorflow/tensorflowGörüntünün çalıştırılacağı aynı bağlantı noktasında çalışan başka bir sunucum var . Resmimi başka bir bağlantı noktasında çalışacak şekilde nasıl kurabilirim. Bunu denedim: docker run -it -d -p 8888:8000 tensorflow/tensorflow 8888 portunu istemcideki resmimden 8000'e bağladım, ancak çalışmıyor.
Emanuel Fontelles

1
@EmanuelFontelles Hata ayıklamaya çalışırken -dseçeneği kullanmayın . Şimdi, bağlantı noktaları olarak açığa çıkıyor HOST:CONTAINER. Bu docker run -it -p 8000:8888
yüzden koşmalısın

60

Bu bana yardımcı oldu:

docker-compose down  # Stop container on current dir if there is a docker-compose.yml
docker rm -fv $(docker ps -aq)  # Remove all containers
sudo lsof -i -P -n | grep <port number>  # List who's using the port

ve sonra: kill -9 <process id>(macOS) veya sudo kill <process id>(Linux).

Kaynak: Rub21 kullanıcısının yorumu .


3
docker rm -fv $(docker ps -aq)bu hat ihtiyacım olan tek şeydi. Teşekkürler
Ryan Walker

lsof çok çalıştı, süreci durdurdu ve tekrar harekete geçti ....
Bay E

11

Aynı sorunu yaşadım
docker-compose down --rmi all(docker-compose up çalıştırdığınız dizinde)
yardımcı olur


3
Evet, her zaman yardımcı olur, ancak downgenellikle yapmak isteyeceğiniz son şeydir. Mevcut durumu kaybetmek bir parça şeker değildir.
Ngoral

3
Bu aynı zamanda çektiğiniz yerel docker görüntülerini de silecektir, bu yüzden dikkatli kullanın
Micah Simmons

Cevapta yerel docker imajlarını sileceğini söylemeliydiniz.
Ahmed Nour Jamal El-Din

8

Linux / Unix için:

Aşağıdaki komutu kullanarak Linux yardımcı programı için basit arama

netstat -nlp | grep 8888

İşlemin bu bağlantı noktasında çalıştığını gösterecek, ardından işlemin PID'sini kullanarak bu işlemi sonlandıracak (satırda bir PID arayın).

kill PID

netstat, PID / programı gösterir (örn. 2714 / splunkd) .sudo kill 2714 çalışır. Teşekkürler.
Roy


4

Benim durumumda öyleydi

Userland proxy başlatılırken hata oluştu: dinleme tcp 0.0.0.0:9000: bağlama: adres zaten kullanımda

Ve ihtiyacım olan tek şey php fırtınasında dinlemeyi hata ayıklamayı kapatmak ikon


4

Bazı durumlarda, bir konteyneri durdurmadan veya bir işlemi sonlandırmadan önce soruna daha derinlemesine bir hata ayıklama yapmak çok önemlidir.

Aşağıdaki kontrol listesini takip edin:

1) aktüel liman işçisi oluşturma ortamını kontrol
çalıştırın docker-compose ps.
Bağlantı noktası başka bir kap tarafından kullanılıyorsa durdurun docker-compose stop <service-name-in-compose-file>veya stopile değiştirerek çıkarın rm.

2) Mevcut çalışma alanı dışından geçen kapları atın
Run docker psBarındırıcınıza altında çalışan tüm konteynerlerin listesini görmek için.
Bağlantı noktasının başka bir konteyner tarafından kullanıldığını tespit ederseniz, ile durdurabilirsiniz docker stop <container-id>.
(*) Kaynak composeortamın kapsamında olmadığınız için - durdurmak üzere olduğunuz konteyner hakkında daha fazla bilgi toplamak için önce docker inspect'i kullanmak iyi bir uygulamadır .

3) Bağlantı noktasının ana bilgisayarda çalışan diğer işlemler tarafından kullanılıp kullanılmadığını kontrol edin
Örneğin, bağlantı noktası 6379 çalıştırılıyorsa:

$ sudo netstat -ltnp | grep ':6379'
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      915/redis-server 12 
tcp6       0      0 ::1:6379                :::*                    LISTEN      915/redis-server 12

(*) Ayrıca , esas olarak çeşitli işlemler tarafından açılan dosyalar hakkında bilgi almak için kullanılan lsof komutunu da kullanabilirsiniz (bundan netstatönce çalıştırmanızı öneririm ).

Yani, yukarıdaki çıktı In case PIDolduğunu 915. Şimdi çalıştırabilirsiniz:

$ ps j 915
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    1   915   915   915 ?           -1 Ssl    123   0:11 /usr/bin/redis-server 127.0.0.1:6379

Üst sürecin kimliğine ( PPID) ve yürütme komutuna bakın.
Ayrıca şunları da çalıştırabilirsiniz: $ pstree -s <PID>sürecin ve ilgili işlemlerin görsel bir görüntüsüne.

Bizim durumumuzda, sürecin muhtemelen bir arka plan programı olduğunu görebiliriz (PPID 1'dir) - Bu durumda , işlem tarafından ortaya çıkan iş parçacığı sayısı gibi işlem hakkında daha derinlemesine bilgi almak için çalıştırmayı düşünün:
A) $ cat /proc/<PID>/status, yetenekleri, vb. '.
B) $ systemctl status <PID>görmek içinbelirli bir sürecin yaratılmasına neden olan birim. Hizmet kritik değilse, hizmeti durdurabilir ve devre dışı bırakabilirsiniz .

4) Yeniden Docker hizmet
Run: sudo service docker restart.

5) Bu noktaya ulaştınız ve ..
Yalnızca sisteminizi riske atmıyorsa - sunucuyu yeniden başlatmayı düşünün.


2

Bu öğleden sonra limanı yükselttim ve aynı problemle karşılaştım. Docker'ı yeniden başlatmayı denedim ama şans yok.

Sonunda bilgisayarımı yeniden başlatmam gerekti ve işe yaradı. Kesinlikle bir böcek.


Yeniden başlatmak benim için de yardımcı oldu. Teşekkürler.
Alexander

1

Kontrol edin docker-compose.yml, bağlantı noktasının iki kez belirtilmiş olması durumu olabilir.

version: '3'
services:
  registry:
    image: mysql:5.7
        ports:
      - "3306:3306"             <--- remove either this line or next
      - "127.0.0.1:3306:3306"

0

Aynı sorunla birkaç kez karşılaştım. Docker'ı yeniden başlatmak hile yapıyor gibi görünüyor


bir konteynerin nasıl yeniden başlatılacağını görüyorum. Docker nasıl yeniden başlatılır?
Mark Wardell


0
docker-compose down --rmi all 

ve sonra bilgisayarınızı yeniden başlatın


7
Üç yaşındaki bir soruyu sekiz başka yanıtla yanıtlarken, yanıtınızın hangi yeni soruyu ele aldığını belirtmek yararlıdır.
Jason Aller

0

@ DmitrySandalov'un cevabının bir çeşidi: 8080'de çalışan tomcat / java vardı ve devam etmem gerekiyordu. Docker-compose.yml dosyasına baktım ve 8080 girişini seçtiğim bir başkasıyla değiştirdim.

nginx:
  build: nginx
  ports:
    #- '8080:80' <-- original entry
    - '8880:80'
    - '8443:443'

Mükemmel çalıştı. (Tek kırışıklık, projeyi güncellersem, harici bir depodan geldiği için değişikliğin silinecek olmasıdır.)


0

Aynı sorunu yaşıyorsanız ve Windows'daysa bir yan not:

Benim durumumda, benim yolumdaki süreç adil grafana-server.exe. İlk önce ikili sürümü indirdiğim ve yürütülebilir dosyayı çift tıkladığım için artık kullanıcı tarafından SYSTEMyapamadığım bir hizmet olarak başlıyor taskkill(izin yok)

Windows'un "Servis yöneticisine" gidip "Grafana" servisini aramalı ve onu durdurmalıyım. Bundan sonra 3000 numaralı bağlantı noktası artık dolu değil.

Umarım yardımcı olur.


0

8888 numaralı bağlantı noktasını kullanan Jüpiter'di ve Jüpiter dizüstü bilgisayarın yapılandırma dosyasını başka bir bağlantı noktasında çalıştırmak için değiştirmek zorunda kaldım.

o belirli bağlantı noktasını kimin kullandığını listelemek için. sudo lsof -i -P -n | grep 9

Jupyter'ın ~ / .jupyter / jupyter_notebook_config.py içinde aşağıdaki satırı yorumlayarak / düzenleyerek çalıştırmasını istediğiniz bağlantı noktasını belirtebilirsiniz:

c.NotebookApp.port = 9999

Bir jupyter_notebook_config.py'ye sahip değilseniz, jupyter notebook --generate-config'i çalıştırmayı deneyin. Jupyter yapılandırması hakkında daha fazla ayrıntı için buna bakın.


0

Network_mode: "bridge" i "host" olarak değiştirmek benim için yaptı.

Bu ile

version: '2.2'
services:
  bind:
    image: sameersbn/bind:latest
    dns: 127.0.0.1
    ports:
      - 172.17.42.1:53:53/udp
      - 172.17.42.1:10000:10000
    volumes:
        - "/srv/docker/bind:/data"
    environment:
      - 'ROOT_PASSWORD=secret'
    network_mode: "host"

0

Çalıştırılmadan önce: docker run -d --name oracle -p 1521: 1521 -p 5500: 5500 qa / oracle Bağlantı noktasını docker run -d --name oracle -p 1522: 1522 -p 5500 olarak değiştirdim: 5500 qa / oracle

Benim için iyi çalıştı !


0

Makinemde, netstat -tulpnkullanımdaki bağlantı noktası (8080) için bu komuttan bir PID gösterilmiyordu, bu yüzden onu öldüremedim, kapları öldürdüm ve bilgisayarı yeniden başlatmak işe yaramadı. Bu yüzden service docker restartkomut benim için yeniden başlatıldı (ubuntu) ve bağlantı noktası artık kullanımda değildi ve mutlu bir arkadaşım ve öğle yemeğine gidiyorum.


0

Yeni bir conatier başlatmaya çalışırken aşağıdaki hatayı alıyordum - listen tcp 0.0.0.0:8080: bind: adres zaten kullanımda.

Çözüm: netstat -tulnp | grep 8080

[root@ip-112-x6x-2x-xxx.xxxxx.compute.internal (aws_main) ~] # netstat -tulnp | TCP 0 0 0.0.0.0:8080 0.0.0.0:* grep 8080 DİNLE 12749 / Java [root@ip-112-x6x-2x-xxx.xxxxx.compute.internal (aws_main) ~] #

öldür -9 12749

Ardından, çalışması gereken kapsayıcıyı yeniden başlatmayı deneyin


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.