Tệp daemon.json có thể đã chứa cấu hình DNS, lưu trữ hoặc ghi nhật ký. Khi thay đổi proxy, các khóa đó phải được giữ nguyên.

Với yq v4 của Mike Farah, gán từng trường riêng lẻ và ghi một bản ứng viên riêng:

http_proxy='http://proxy.example:8080' \
https_proxy='http://proxy.example:8080' \
no_proxy='localhost,127.0.0.1,.internal.example' \
yq -o=json '
  .proxies."http-proxy" = strenv(http_proxy) |
  .proxies."https-proxy" = strenv(https_proxy) |
  .proxies."no-proxy" = strenv(no_proxy)
' /etc/docker/daemon.json > daemon.proxy-candidate.json

Danh sách proxy HTTP cung cấp ứng viên cho hai giá trị URL HTTP khi lưu lượng tới registry công cộng có thể dùng trung gian công cộng; hãy giữ các ngoại lệ nội bộ. strenv đọc mỗi giá trị dưới dạng chuỗi. env thì phân tích giá trị YAML, điều không cần thiết cho các trường URL và ngoại lệ này. Tên biến môi trường bên trong strenv không có tiền tố đô la.

Gán ba trường giữ nguyên các thành viên khác của proxies cũng như các cấu hình cấp cao nhất không liên quan. Tùy chọn -o=json giữ đầu ra ở định dạng mà Docker mong đợi. Một chương trình khác tên yq có thể có ngôn ngữ biểu thức khác.

Hãy rà soát bản ứng viên trước khi thay tệp đang hoạt động bằng quy trình cấu hình thông thường của máy. Ghi thẳng trở lại tệp đầu vào bằng chuyển hướng shell có thể cắt cụt nó trước khi yq đọc.

Các tên trường có dấu gạch nối này cấu hình daemon của Docker Engine. Docker Desktop dùng cài đặt proxy riêng, còn đối tượng proxy môi trường container của CLI có lược đồ khác.

Bài viết liên quan