Arka plan programından Docker hatası yanıtı: "Çakışma… zaten kapsayıcı tarafından kullanılıyor"


135

Quantum GIS'i burada bulduğum aşağıdaki talimatlarla çalıştırmak için bilgisayarımda Docker kullanıyorum: docker-qgis-desktop - QGIS masaüstünü çalıştıran basit bir docker kapsayıcısı

Bu hata mesajını almaya başladığım geçen haftaya kadar her şey yolunda gidiyordu:

Error response from daemon: Conflict. 
The name "qgis-desktop-2-4" is already in use by container 235566ae17b8. 
You have to delete (or rename) that container to be able to reuse that name.

Bu sitede ipuçları aramamıza rağmen bunun ne anlama geldiğinden tam olarak emin değilim. Bundan önce hiçbir şeyi değiştirmedim ve bu komutla kabı başarıyla başlatıyorum:

sudo docker run --rm --name="qgis-desktop-2-4"     -i -t     -v ${HOME}:/home/${USER}     -v /tmp/.X11-unix:/tmp/.X11-unix     -e DISPLAY=unix$DISPLAY     kartoza/qgis-desktop:latest

Bunu nasıl düzeltebilirim?

Yanıtlar:


218

Bu adı taşıyan bir kap qgis-desktop-2-4sistemde zaten var gibi görünüyor . Gerçekten var olup olmadığını onaylamak için aşağıdaki komutun çıktısını kontrol edebilirsiniz:

$ docker ps -a

Yukarıdaki komutun çıktısındaki son sütun isimler içindir.

Kap varsa, şunu kullanarak çıkarın:

$ docker rm qgis-desktop-2-4

Veya zorla kullanarak,

$ docker rm -f qgis-desktop-2-4

Ve sonra yeni bir kapsayıcı oluşturmayı deneyin.


hey @Dharmit yorum için teşekkürler. Bunu denedim ama şimdi şu hata mesajını alıyorumgroupadd: GID '0' already exists useradd: user 'root' already exists No protocol specified Warning: qgis.bin: cannot connect to X server unix:0.0
marty_c

Görünüşe göre görüntü kullanıcı kökünü ve aslında her ikisi de zaten var olan bir kök grubu yapmaya çalışıyor. Docker, varsayılan kullanıcı ve grup olarak root: root kullanır. Ancak ilk konteyneri kaldırdığınızda ilk sorun çözüldü.
luxas

hmm, tuhaf öyleyse neden 3-4 ay ile başlamak iyi çalışıyordu. Bunu düzeltmek için ne yapabileceğime dair bir fikrin var mı ?!
marty_c

1
Eskisini öldürüp aynı isimle tekrar çağırmak yerine mevcut konteyneri nasıl yeniden başlatabiliriz?
Dhanesh Mane

13
@DhaneshMane docker restartveya docker stop& docker startsize yardımcı olmalı.
Dharmit

34

Komut yerine: docker run

Kullanmalısın:

docker start **CONTAINER ID**

çünkü konteyner zaten mevcut

Daha fazla bilgi


1
'docker start' ana bilgisayar ağını, komut satırından bağlama birimleri ve benim durumumda gerekli olan diğer seçenekleri etkinleştirmek için seçenekler sunmaz. Bu yüzden şahsen silmek (budamak) ve sonra koşmak zorunda kaldım.
HH- Carole Baskin'den özür dile

1
Docker'ı kullandığımda @horsehair <myContainerName> uygulamasını kullandığımda açığa çıkan tüm bağlantı noktalarını ve birim bağlantılarını yeniden kuruyor. Dolayısıyla, kapsayıcınızı başlangıçta nasıl çalıştırdığınıza bağlı olarak, bu ayarlar docker start ile çözülmelidir.
djchapm

Evet, her iki şekilde çalışmasını istediğim için bu tür berbat .... takıma katılan geliştiriciler için ve daha önce onu çalıştıran geliştiriciler için başlayın / çalıştırın. çok idempotent değil :(. pekala, sanırım bash betiklerinde biraz mantık yapmak zorundayım
Dean Hiller

9

Bu hatayı epeyce aldım, bu yüzden şimdi kullanılmayan tüm kapları aynı anda toplu olarak kaldırıyorum:

docker container prune 

-fistem olmadan kaldırmaya zorlamak için ekleyin .

Kullanılmayan tüm kapları listelemek için (çıkarmadan):

docker container ls -a --filter status=exited --filter status=created 

Diğer nesnelerin (ağlar, birimler, vb.) Nasıl budanacağına dair daha fazla örnek için buraya bakın .


8

Benim gibi Google'dan buraya gelen ve tek bir paylaşılan hizmetle birden çok docker-compose dosyası kullanarak kapsayıcılar oluşturmak isteyen kişiler için:

Bazen, örneğin bir veritabanı docker konteynerini paylaşan farklı projeleriniz olur. Yalnızca ilk çalıştırma DB-Docker'ı başlatmalı, ikincisi DB'nin zaten çalışmakta olduğunu algılamalı ve bunu atlamalıdır. Böyle bir davranışa ulaşmak için Limançıların aynı ağda ve aynı projede yer almasına ihtiyacımız var . Ayrıca docker container adının aynı olması gerekir.

1: docker-compose'da aynı ağ ve kapsayıcı adını ayarlayın

docker-compose 1. projede:

version: '3'

services:
    service1:
        depends_on:
            - postgres
        # ...
        networks:
            - dockernet

    postgres:
        container_name: project_postgres
        image: postgres:10-alpine
        restart: always
        # ...
        networks:
            - dockernet

networks:
    dockernet:

docker-compose 2. projede:

version: '3'

services:
    service2:
        depends_on:
            - postgres
        # ...
        networks:
            - dockernet

    postgres:
        container_name: project_postgres
        image: postgres:10-alpine
        restart: always
        # ...
        networks:
            - dockernet

networks:
    dockernet:

2.: Aynı projeyi -p param kullanarak ayarlayın veya her iki dosyayı da aynı dizine koyun.

docker-compose -p {projectname} up

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.