Điểm:2

Chạy dockerd làm nền trên WSL Ubuntu

lá cờ us

Tôi đã cài đặt Docker cho bản phân phối WSL Ubuntu 20.04. Để làm cho nó chạy tôi cần:

sudo dockerd

Nó chạy nhưng nó chặn tab đầu cuối của tôi. Để làm việc với các vùng chứa, tôi cần mở tab thứ hai. tôi đã thử sử dụng sudo dockerd & - nó dường như chạy dockerd ở chế độ nền, nhưng khi tôi thay đổi thư mục thì nó dừng lại.

nhập mô tả hình ảnh ở đây

Làm cách nào tôi có thể chạy dockerd trong nền và thay đổi thư mục mà không dừng?

muru avatar
lá cờ us
Tại sao không sử dụng [Docker Desktop with WSL backend](https://docs.docker.com/desktop/windows/wsl/)?
Roman Marusyk avatar
lá cờ us
@muru vì Docker cho Máy tính để bàn thay đổi giấy phép và sẽ không còn miễn phí nữa. Tôi cố gắng tìm những cách khác: https://jason-umiker.medium.com/replacing-docker-desktop-with-wsl2-and-or-rancher-desktop-on-windows-5e036f9dc3a4
muru avatar
lá cờ us
Nó sẽ vẫn miễn phí (như trong bia) cho mục đích sử dụng cá nhân.
Roman Marusyk avatar
lá cờ us
@muru vâng, tôi biết, nhưng tôi sẽ không sử dụng nó cho mục đích cá nhân
Điểm:2
lá cờ vn

Cách tiêu chuẩn để chạy trình nền Docker Engine (không có Docker Desktop) trong WSL Ubuntu chỉ đơn giản là:

khởi động docker dịch vụ sudo

Điều này xử lý daemonization của nó cùng với nhiều nhiệm vụ khác. Bạn có thể xem toàn bộ kịch bản bằng cách kiểm tra /etc/init.d/docker. Chạy cái này thay vì cố gắng sao chép thủ công quá trình khởi động.

Nếu bạn muốn nó tự động bắt đầu, có một số tùy chọn:

  • Bạn đã thấy câu trả lời khác để sửa đổi tập lệnh khởi động của mình. Cá nhân, tôi không phải là một fan hâm mộ lớn của phương pháp này. Đầu tiên, tôi muốn giữ cho các tập lệnh khởi động của mình gọn gàng nhất có thể để có hiệu suất tốt nhất. Thứ hai, những sửa đổi như thế này có xu hướng "tích lũy" theo thời gian, khiến việc khắc phục sự cố trình bao của bạn trở nên khó khăn hơn trong tương lai. Điều đó nói rằng, nó không phải là một lựa chọn khủng khiếp cho WSL, ít nhất là trên Windows 10.

    Tuy nhiên, nếu bạn thực sự muốn đi theo con đường này, có một cách dễ dàng hơn nhiều so với câu trả lời khác. Đơn giản chỉ cần thêm dòng sau vào của bạn ~/.bash_profile (vì có vẻ như bạn đang sử dụng Bash):

    wsl.exe -u root -e sh -c "trạng thái docker dịch vụ > /dev/null || bắt đầu docker dịch vụ"
    

    Đó là tất cả. Bạn không cần phải thực hiện các sửa đổi đối với sudoers từ wsl.exe -u gốc thực thi phiên với tư cách là người dùng root mà không cần mật khẩu.

    Nhưng chắc chắn sử dụng của bạn ~/.bash_profile cho việc này, không ~/.bashrc. Cái trước chỉ được thực hiện cho đăng nhập shell, nhưng cái sau được thực thi cho tất cả các shell tương tác, bổ sung thêm chi phí hoạt động.

  • Windows 11 giúp việc này trở nên dễ dàng hơn (nếu bạn có thể nâng cấp) với cấu hình đặc biệt cho các dịch vụ mà bạn muốn chạy khi phiên bản WSL khởi động. Chỉ cần sudo vi /etc/wsl.conf với các nội dung sau:

    [khởi động]
    lệnh = "bắt đầu docker dịch vụ"
    

    Điều này sẽ chỉ thực hiện một lần, khi Ubuntu được khởi động. Nếu phiên bản bị tắt với wsl --chấm dứt Ubuntu hoặc wsl --shutdown, nó sẽ chạy lại lần sau khi bạn khởi động Ubuntu.

    Các lệnh này cũng chạy với quyền root mà không cần mật khẩu.

  • Nếu bạn muốn khởi động Docker Engine bất cứ khi nào bạn đăng nhập vào Windows, hãy tạo một "Tác vụ theo lịch trình" trong Windows chạy trên Đăng nhập và trỏ đến wsl.exe với các đối số là -u root -e sh -c "trạng thái docker dịch vụ || bắt đầu docker dịch vụ"

Roman Marusyk avatar
lá cờ us
Đó là giải pháp tốt nhất. Cảm ơn bạn. Tôi xin lỗi vì không thể kiểm tra sớm
Điểm:2
lá cờ in

Cách duy nhất tôi thấy mọi người làm điều này là chạy Docker trong máy ảo (dường như không phải là một tùy chọn mà bạn đang xem xét) hoặc chạy tập lệnh được thực thi khi WSL khởi động.

Đây là cách bạn có thể chạy Docker khi khởi động WSL:

  1. chỉnh sửa của bạn sudoers để cho phép tài khoản người dùng của bạn khởi động Docker mà không bị nhắc nhập mật khẩu:
    sudo visudo 
    
    Thêm dòng này:
    rmarusyk TT CẢ=(TT CẢ) NOPASSWD: /usr/bin/dockerd
    
    Ghi chú: Hãy chắc chắn để thay đổi rmarusyk vào tài khoản người dùng mà bạn muốn Docker chạy bên dưới nếu nó không giống với tên trong ảnh chụp màn hình của bạn.
  2. chỉnh sửa của bạn ~/.bashrc file để kiểm tra xem Docker có đang chạy không và nếu không, hãy khởi động nó:
    # Khởi động Docker (nếu chưa chạy)
    CHẠY=`ps aux | grep dockerd | grep -v grep`
    nếu [ -z "$RUNNING" ]; sau đó
        Sudo dockerd > /dev/null 2>&1 &
        từ chối
    fi
    
    Ghi chú: Điều này có thể được thêm vào hầu hết mọi nơi, nhưng nói chung sẽ "sạch" hơn nếu có nó ở cuối tệp để mọi thứ có thể được yêu cầu trước thời hạn được định cấu hình/tải/v.v.
  3. (Tùy chọn) Nếu bạn muốn chạy các lệnh Docker mà không cần thêm tiền tố cho chúng sudo, bạn có thể thêm tài khoản người dùng của mình vào người đóng tàu tập đoàn:
    sudo usermod -a -G docker $USER
    
  4. Kiểm tra điều này hoạt động bằng cách đóng thiết bị đầu cuối, khởi động lại và kiểm tra trạng thái của Docker:
    docker ps 
    
    Ghi chú: Vui lòng sử dụng bất kỳ lệnh Docker nào.

Điều này sẽ làm những gì bạn cần

Roman Marusyk avatar
lá cờ us
Cảm ơn rất nhiều. Nó hoạt động!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.