Sự cố Docker trong GitLab CI

Nếu bạn gặp lỗi sau trong log pipeline GitLab CI/CD của mình:

error during connect: Get "http://docker:2375/v1.51/info": dial tcp: lookup docker on <ip_edited>:53: server misbehaving

…thì rất có thể bạn đang cố sử dụng Docker-in-Docker.

Nguyên nhân gốc rễ của lỗi này thường nằm ở cấu hình GitLab Runner — cụ thể là thiết lập network_mode trong file config.toml. Nếu bạn đã cấu hình network_mode theo cách thủ công, thiết lập đó có thể khiến Docker không phân giải được hostname docker, vốn được dùng để giao tiếp với Docker daemon.

Trong hầu hết các trường hợp, việc xóa hẳn dòng network_mode khỏi file config.toml của runner sẽ khắc phục được sự cố. Theo mặc định, GitLab Runner tạo một mạng Docker riêng cho mỗi job, đảm bảo việc phân giải DNS và giao tiếp giữa các container (bao gồm cả Docker daemon) diễn ra chính xác. Khi bạn ghi đè hành vi này bằng một network mode tùy chỉnh, điều đó có thể phá vỡ sự cô lập đó hoặc ngăn cản việc phân giải tên như mong đợi.

Vì vậy, hãy mở file cấu hình runner của bạn (thường nằm ở /etc/gitlab-runner/config.toml), rồi xóa hoặc chú thích (comment) dòng có dạng như sau:

[[runners]]
  executor = "docker"
  [runners.docker]
    network_mode = "host" <-- this is line which you should remove

Thông thường GitLab runner không cần khởi động lại, nhưng làm vậy cũng không thừa, nên đây là lệnh để bạn tiện dùng:

service gitlab-runner restart

Để biết thêm thông tin chi tiết, hãy tham khảo tài liệu chính thức của GitLab:

  1. https://docs.gitlab.com/runner/executors/docker/#create-a-network-for-each-job