การตอบสนองข้อผิดพลาดของ Docker จาก daemon:“ Conflict …ถูกใช้โดยคอนเทนเนอร์แล้ว”


135

ฉันใช้ Docker บนพีซีของฉันเพื่อเรียกใช้ Quantum GIS ด้วยคำแนะนำต่อไปนี้ที่ฉันพบที่นี่: docker-qgis-desktop - คอนเทนเนอร์นักเทียบท่าแบบธรรมดาที่เรียกใช้เดสก์ท็อป QGIS

ทุกอย่างทำงานได้ดีจนถึงสัปดาห์ที่แล้วเมื่อฉันเริ่มได้รับข้อความแสดงข้อผิดพลาดนี้:

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.

ฉันไม่แน่ใจว่าสิ่งนี้หมายถึงอะไรแม้ว่าจะค้นหาเบาะแสในไซต์นี้ก็ตาม ฉันไม่ได้เปลี่ยนแปลงอะไรก่อนที่จะเกิดเหตุการณ์นี้และเปิดใช้งานคอนเทนเนอร์สำเร็จด้วยคำสั่งนี้:

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

ฉันจะแก้ไขปัญหานี้ได้อย่างไร?

คำตอบ:


218

ดูเหมือนว่าคอนเทนเนอร์ที่มีชื่อqgis-desktop-2-4นี้มีอยู่แล้วในระบบ คุณสามารถตรวจสอบผลลัพธ์ของคำสั่งด้านล่างเพื่อยืนยันว่ามีอยู่จริงหรือไม่:

$ docker ps -a

คอลัมน์สุดท้ายในเอาต์พุตของคำสั่งด้านบนใช้สำหรับชื่อ

หากมีคอนเทนเนอร์อยู่ให้นำออกโดยใช้:

$ docker rm qgis-desktop-2-4

หรือกำลังใช้

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

แล้วลองสร้างคอนเทนเนอร์ใหม่


เฮ้ @Dharmit ขอบคุณสำหรับความคิดเห็น ฉันลองแล้ว แต่ตอนนี้ได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้groupadd: 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

ดูเหมือนว่าอิมเมจจะพยายามทำให้ผู้ใช้รูทและเป็นกลุ่มรูทที่ทั้งสองมีอยู่แล้ว Docker ใช้ root: root เป็นผู้ใช้และกลุ่มเริ่มต้น แต่ปัญหาแรกได้รับการแก้ไขเมื่อคุณนำคอนเทนเนอร์แรกออก
luxas

อืมแปลกจังทำไมมันถึงใช้งานได้ดีเริ่มด้วยเช่น 3-4 เดือน มีไอเดียอะไรให้แก้ไขได้บ้าง!
marty_c

1
เราจะรีสตาร์ทคอนเทนเนอร์ที่มีอยู่ได้อย่างไรแทนที่จะฆ่าคอนเทนเนอร์เก่าและเรียกใช้ชื่อเดียวกันอีกครั้ง
Dhanesh Mane

13
@DhaneshMane docker restartหรือdocker stop& docker startควรช่วยคุณ
ธรรมิก

34

แทนคำสั่ง: docker run

คุณควรใช้:

docker start **CONTAINER ID**

เนื่องจากมีคอนเทนเนอร์อยู่แล้ว

ข้อมูลเพิ่มเติม


1
'docker start' ไม่ได้ให้ตัวเลือกในการเปิดใช้งานเครือข่ายโฮสต์ไดรฟ์ข้อมูลจากบรรทัดคำสั่งและตัวเลือกอื่น ๆ ที่จำเป็นในกรณีของฉัน โดยส่วนตัวแล้วฉันต้องลบ (พรุน) แล้วเรียกใช้
HH- ขอโทษ Carole Baskin

1
@horsehair เมื่อฉันใช้ docker start <myContainerName> มันจะสร้างพอร์ตที่เปิดเผยและไดรฟ์ข้อมูลทั้งหมดอีกครั้ง ดังนั้นขึ้นอยู่กับวิธีที่คุณเรียกใช้คอนเทนเนอร์ในตอนแรกการตั้งค่าเหล่านั้นควรแก้ไขด้วยการเริ่มต้นนักเทียบท่า
djchapm

ใช่แบบนี้แย่มากเพราะฉันต้องการให้มันทำงานทั้งสองทาง .... เริ่ม / รันสำหรับนักพัฒนาที่เข้าร่วมทีมและสำหรับนักพัฒนาที่เคยทำงานมาก่อน มันไม่ค่อยมีสาระ :( ดีฉันคิดว่าฉันต้องทำบางอย่างถ้าตรรกะในสคริปต์ทุบตี
Dean Hiller

9

ฉันได้รับข้อผิดพลาดนี้ค่อนข้างมากดังนั้นตอนนี้ฉันจะลบคอนเทนเนอร์ที่ไม่ได้ใช้ทั้งหมดออกเป็นชุดพร้อมกัน:

docker container prune 

เพิ่ม-fเพื่อบังคับให้ลบโดยไม่ต้องแจ้ง

ในการแสดงรายการคอนเทนเนอร์ที่ไม่ได้ใช้ทั้งหมด (โดยไม่ต้องนำออก):

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

ดูที่นี่ตัวอย่างเพิ่มเติมวิธีการตัดวัตถุอื่น ๆ (เครือข่ายเล่มอื่น ๆ )


8

สำหรับผู้ที่มาจาก Google เช่นฉันและต้องการสร้างคอนเทนเนอร์โดยใช้ไฟล์เขียนเทียบท่าหลายไฟล์พร้อมบริการที่ใช้ร่วมกัน:

บางครั้งคุณมีโปรเจ็กต์ต่างๆที่จะแชร์เช่นฐานข้อมูล Docker container เฉพาะการรันครั้งแรกเท่านั้นที่ควรเริ่มต้น DB-Docker ครั้งที่สองควรตรวจพบว่า DB ทำงานอยู่แล้วและข้ามสิ่งนี้ไป เพื่อให้บรรลุถึงพฤติกรรมดังกล่าวเราต้อง Dockers ที่จะวางในเดียวกันเครือข่ายและในเดียวกันโครงการ นอกจากนี้ยังมีชื่อคอนเทนเนอร์นักเทียบท่าจะต้องเหมือนกัน

ขั้นที่ 1:ตั้งชื่อเครือข่ายและคอนเทนเนอร์เดียวกันใน Docker-compose

นักเทียบท่าเขียนในโครงการ 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:

นักเทียบท่าเขียนในโครงการ 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:

2nd:ตั้งค่าโปรเจ็กต์เดียวกันโดยใช้-p paramหรือใส่ทั้งสองไฟล์ในไดเร็กทอรีเดียวกัน

docker-compose -p {projectname} up

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.