Phản hồi lỗi Docker từ daemon: Xung đột đã được sử dụng bởi container


135

Tôi đã sử dụng Docker trên PC để chạy Quantum GIS theo các hướng dẫn sau tôi đã tìm thấy ở đây: docker-qgis-desktop - Một thùng chứa docker đơn giản chạy máy tính để bàn QGIS

Mọi thứ đã chạy tốt cho đến tuần trước khi tôi bắt đầu nhận được thông báo lỗi này:

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.

Tôi không hoàn toàn chắc chắn điều này có nghĩa là gì mặc dù tìm kiếm manh mối trên trang web này. Tôi đã không thay đổi bất cứ điều gì trước khi điều này xảy ra và đã khởi chạy thành công container bằng lệnh này:

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

Làm thế nào tôi có thể sửa lỗi này?

Câu trả lời:


217

Có vẻ như một container với tên qgis-desktop-2-4đã tồn tại trong hệ thống. Bạn có thể kiểm tra đầu ra của lệnh dưới đây để xác nhận nếu nó thực sự tồn tại:

$ docker ps -a

Cột cuối cùng trong đầu ra của lệnh trên là cho tên.

Nếu container tồn tại, loại bỏ nó bằng cách sử dụng:

$ docker rm qgis-desktop-2-4

Hoặc sử dụng mạnh mẽ,

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

Và sau đó thử tạo một container mới.


hey @Dharmit cảm ơn vì nhận xét. Tôi đã thử điều đó nhưng bây giờ nhận được thông báo lỗi saugroupadd: 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

Có vẻ như hình ảnh cố gắng tạo người dùng root và một nhóm gốc mà cả hai thực tế đã tồn tại. Docker sử dụng root: root làm người dùng và nhóm mặc định. Nhưng vấn đề đầu tiên được khắc phục khi bạn loại bỏ container đầu tiên.
luxas

hmm, thật lạ, tại sao nó lại hoạt động tốt khi bắt đầu với 3 - 4 tháng. Bất cứ ý tưởng nào tôi có thể làm để khắc phục điều này?!
marty_c

1
Làm thế nào chúng ta có thể khởi động lại container hiện tại thay vì giết cái cũ và gọi lại cùng tên?
Dhanesh Mane

13
@DhaneshMane docker restart, hoặc docker stop& docker startsẽ giúp bạn.
Dharmit

34

Thay vì lệnh: docker run

Bạn nên sử dụng:

docker start **CONTAINER ID**

bởi vì container đã tồn tại

Thêm thông tin


1
'Docker start' không cung cấp tùy chọn để bật mạng máy chủ, gắn kết khối lượng từ dòng lệnh và các tùy chọn khác cần thiết trong trường hợp của tôi. Vì vậy, cá nhân tôi đã phải xóa (cắt tỉa) sau đó chạy.
HH- Xin lỗi Carole Baskin

1
@horsehair khi tôi sử dụng docker start <myContainerName> nó sẽ thiết lập lại tất cả các cổng được hiển thị và gắn kết âm lượng. Vì vậy, tùy thuộc vào cách ban đầu bạn chạy container, các cài đặt đó sẽ giải quyết khi bắt đầu docker.
djchapm

Vâng, loại này thật tệ khi tôi muốn nó hoạt động theo cả hai cách .... bắt đầu / chạy cho các nhà phát triển tham gia nhóm và cho các nhà phát triển đã chạy nó một lần trước đó. nó không phải là rất bình thường :(. ồ, tôi đoán tôi phải làm một số nếu logic trong các tập lệnh bash
Dean Hiller

9

Tôi đã gặp lỗi này khá nhiều, vì vậy bây giờ tôi thực hiện loại bỏ hàng loạt tất cả các container không sử dụng cùng một lúc:

docker container prune 

thêm -fvào để loại bỏ lực lượng mà không kịp thời.

Để liệt kê tất cả các container không sử dụng (không loại bỏ):

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

Xem ở đây thêm ví dụ về cách cắt tỉa các đối tượng khác (mạng, khối lượng, v.v.).


8

Đối với những người hạ cánh ở đây từ google như tôi và chỉ muốn xây dựng các thùng chứa bằng nhiều tệp soạn thảo docker với một dịch vụ chia sẻ:

Đôi khi bạn có các dự án khác nhau sẽ chia sẻ, ví dụ như một container chứa cơ sở dữ liệu. Chỉ lần chạy đầu tiên mới khởi động DB-Docker, lần thứ hai sẽ phát hiện ra rằng DB đã chạy và bỏ qua điều này. Để đạt được một hành vi như vậy, chúng ta cần Docker nằm trong cùng một mạng và trong cùng một dự án . Ngoài ra tên container docker cần phải giống nhau.

Thứ 1: Đặt cùng tên mạng và vùng chứa trong docker-compose

docker-compose trong dự án 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 trong dự án 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:

Lần 2: Đặt cùng một dự án bằng -p param hoặc đặt cả hai tệp vào cùng một thư mục.

docker-compose -p {projectname} up

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.