Respons galat Docker dari daemon: "Konflik ... sudah digunakan oleh kontainer"

135

Saya telah menggunakan Docker di PC saya untuk menjalankan Quantum GIS dengan instruksi berikut yang saya temukan di sini: docker-qgis-desktop - Sebuah wadah buruh pelabuhan sederhana yang menjalankan desktop QGIS

Semuanya telah berjalan dengan baik sampai minggu lalu ketika saya mulai mendapatkan pesan kesalahan ini:

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.

Saya tidak sepenuhnya yakin apa artinya ini meskipun mencari petunjuk di situs ini. Saya belum mengubah apa pun sebelum ini terjadi dan telah berhasil meluncurkan wadah dengan perintah ini:

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

Bagaimana saya bisa memperbaikinya?

marty_c
sumber

Jawaban:

217

Sepertinya wadah dengan nama qgis-desktop-2-4sudah ada di sistem. Anda dapat memeriksa output dari perintah di bawah ini untuk mengonfirmasi apakah memang ada:

$ docker ps -a

Kolom terakhir pada output perintah di atas adalah untuk nama.

Jika wadah ada, hapus menggunakan:

$ docker rm qgis-desktop-2-4

Atau dengan paksa menggunakan,

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

Dan kemudian coba buat wadah baru.

Dharmit
sumber
hey @ Dharmit terima kasih atas komentarnya. Saya mencobanya tetapi sekarang mendapatkan pesan kesalahan berikutgroupadd: 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
Sepertinya gambar mencoba membuat root pengguna, dan grup root yang keduanya sebenarnya sudah ada. Docker menggunakan root: root sebagai pengguna dan grup default. Tapi masalah pertama sudah diperbaiki ketika Anda menghapus wadah pertama.
luxas
hmm, aneh jadi kenapa bisa bekerja dengan baik yaitu 3 - 4 bulan Adakah yang bisa saya lakukan untuk memperbaikinya?
marty_c
1
Bagaimana kita bisa memulai kembali wadah yang sudah ada alih-alih membunuh yang lama dan memanggil dengan nama yang sama lagi?
Dhanesh Mane
13
@DhaneshMane docker restart, atau docker stop& docker startakan membantu Anda.
Dharmit
34

Alih-alih perintah: docker run

Kamu harus menggunakan:

docker start **CONTAINER ID**

karena wadahnya sudah ada

Info lebih lanjut

nasir taha
sumber
1
'buruh pelabuhan mulai' tidak memberikan opsi untuk mengaktifkan jaringan host, me-mount volume dari baris perintah, dan opsi lain yang diperlukan dalam kasus saya. Jadi secara pribadi saya harus menghapus (prune) kemudian jalankan.
HH- Minta maaf kepada Carole Baskin
1
@horsehair ketika saya menggunakan buruh pelabuhan mulai <myContainerName> itu membangun kembali semua port yang terbuka dan volume mount. Jadi tergantung pada bagaimana Anda awalnya menjalankan wadah Anda, pengaturan tersebut harus diselesaikan dengan buruh pelabuhan mulai.
djchapm
Ya, jenis ini menyebalkan karena saya ingin itu berfungsi dua arah .... mulai / jalankan untuk pengembang yang bergabung dengan tim dan untuk pengembang yang menjalankannya sekali sebelumnya. itu tidak terlalu idempoten :(. oh well, saya kira saya harus melakukan beberapa logika jika dalam skrip bash
Dean Hiller
9

Saya mendapatkan kesalahan ini cukup banyak, jadi sekarang saya melakukan penghapusan batch semua kontainer yang tidak digunakan sekaligus:

docker container prune 

tambahkan -funtuk memaksa penghapusan tanpa diminta.

Untuk daftar semua wadah yang tidak digunakan (tanpa penghapusan):

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

Lihat di sini lebih banyak contoh cara memangkas objek lain (jaringan, volume, dll.).

Noam Manos
sumber
8

Untuk orang-orang yang datang ke sini dari Google seperti saya dan hanya ingin membuat kontainer menggunakan beberapa file komposisi buruh pelabuhan dengan satu layanan bersama:

Kadang-kadang Anda memiliki proyek berbeda yang akan dibagikan misalnya wadah buruh pelabuhan basis data. Hanya jalankan pertama yang harus memulai DB-Docker, yang kedua harus mendeteksi bahwa DB sudah berjalan dan lewati ini. Untuk mencapai perilaku seperti itu kita perlu Dockers untuk berbaring di jaringan yang sama dan di proyek yang sama . Juga nama wadah buruh pelabuhan harus sama.

1: Tetapkan nama jaringan dan wadah yang sama di docker-compose

docker-compose di proyek 1:

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 di proyek 2:

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: Atur proyek yang sama menggunakan -p param atau letakkan kedua file di direktori yang sama.

docker-compose -p {projectname} up

Karl Adler
sumber