THẢO LUẬN

thg 10 9, 2020 3:31 SA

@maitrungduc1410 đoạn permission mà bạn thắc mắc chính là vấn đề mình muốn nói đến đó.

Mình chạy lại project mới của bạn vừa tạo và vẫn lỗi:

db_1   | {"t":{"$date":"2020-10-09T10:26:48.728+00:00"},"s":"E",  "c":"STORAGE",  "id":20557,   "ctx":"initandlisten","msg":"DBException in initAndListen, terminating","attr":{"error":"IllegalOperation: Attempted to create a lock file on a read-only directory: /data/db"}}

=> Attempted to create a lock file on a read-only directory: /data/db

Trên máy chạy gitlab-runner (runner của chính bạn cài, không phải shared runner của gitlab ) mà bạn vừa demo bạn gõ cho mình command này:

ps aux | grep gitlab-runner

Và xem gitlab-runner chạy với command nào, ví dụ:

/usr/local/bin/gitlab-runner run --working-directory /home/docker/learning-docker-v2/learning-docker/cicd-auto-deploy --config /etc/gitlab-runner/config.toml --service gitlab-runner --syslog --user root

Quan tâm tham số --user

Khi runner chạy lại .gitlab-ci.yml bạn vào stage test xem cho mình đoạn này giá trị in ra là gì

Fetching changes with git depth set to 50...
Initialized empty Git repository in /builds/thungrac43/cicd-relative-path-non-root/.git/

Bạn xem cho mình permission của folder /builds/thungrac43/cicd-relative-path-non-root/ trên runner là gì.

0

Hello my friend 😄

0
thg 10 9, 2020 3:15 SA

Cay thế nhỉ vẫn được trending

0
thg 10 9, 2020 3:15 SA

thanks em :v

+1
thg 10 9, 2020 3:14 SA

e chân le ve thôi anh =))

0
thg 10 9, 2020 2:58 SA

Bài viết tuyệt với quá ❤️

+1
thg 10 9, 2020 2:50 SA

Ngưỡng mộ quá

+1
thg 10 9, 2020 2:47 SA

lan man khó hiểu

-1
thg 10 9, 2020 2:12 SA

hay quá (+1), những bài viết sau sẽ rất đáng để mong đợi

+1
thg 10 9, 2020 2:11 SA

@Thenb thế đíu nào thằng Hiếu lại đoạt giải nhỉ? anh nghi nó chạy tool lắm =.="

0
thg 10 9, 2020 2:09 SA

@thungrac43 vì mình cũng khá tò mò vấn đề này muốn xem thử có đúng trên Gitlab CI chạy cũng giống mình thường như mình nghĩ, nên mình đã demo luôn cho bạn.

Link repo demo ở đây

Ở link trên mình dùng luôn project trong bài này, mount volume bằng đường dẫn tương đối. Và MongoDB vẫn chạy ngon với non-root user mà không phải sửa gì, mình có test gọi API ở trong pipeline để chắc chắn MongoDB đã chạy ngon, ko khác gì bình thường.

Có 1 sự bất ngờ nhẹ: ko hiểu sao mặc dù folder mount volume ở môi trường ngoài .docker/data/db ban đầu là của root sẵn, nhưng khi chạy lên thì MongoDB vẫn có thể ghi vào đó được với quyền của user 1000:1000. Bình thường đáng ra là phải báo lỗi permission (vì mongo chạy với non-root user).Mình chưa hiểu sao Gitlab Runner lại "thông minh" vậy 😄. Nhưng dù sao nếu báo lỗi thì mình cũng đã có 1 dòng comment chown sẵn cho bạn, nếu có báo lỗi bạn bỏ comment dòng đó là được

0
thg 10 9, 2020 1:35 SA

Bài viết rất hay. Đã follow. Mong chờ bài tiếp. Tks

0
thg 10 9, 2020 1:33 SA

Message Format và Monitor Queue có thể xếp vào mục cần lưu ý khi sử dụng. Tuy nhiên, việc xây dựng hệ thống Message Format hay Monitor Queue có thể gây ra những khó khăn nhất định, đặc biệt là monitor. "Khi xây dựng hệ thống xử lý bất đồng bộ dựa trên message thì việc monitor có tính chất cốt tử", ngoài monitor queue thì còn phải kết hợp với monitor quá trình xử lý một message, không có một hệ thống monitor tốt thì không thể chạy trên môi trường production.

+1

Bạn copy tài liệu này ở đâu? Đã xin ý kiến author chưa?

0
thg 10 8, 2020 7:36 CH

thank

0
thg 10 8, 2020 2:13 CH

@thungrac43, bạn đọc lại phần cuối của bài Docker non-root nhé,

Permission không bị ảnh hưởng bởi user ngừoi chạy docker-compose up (như ban đầu mình nghĩ), mà ban đầu bên ngoài nó có permission nào thì mount vào trong container sẽ có permission như vậy.

Mình cũng chưa bao giờ dùng tới biến môi trường CI_PROJECT_DIR.

Lúc chạy bạn cứ làm sao chắc chắn là folder - nơi bạn mount volume có quyền bằng với user trong container là được. Do vậy dùng đường dẫn tương đối hay tuyệt đối cũng chỉ là tuỳ chọn

Và nếu bạn vẫn không hiểu thì mình rất sẵn lòng setup 1 pipeline demo về việc này (dùng đường dẫn tương đối)

0
thg 10 8, 2020 10:47 SA

@maitrungduc1410 trong bài docker non root bạn chạy docker-compose up tại thư mục đã tạo sẵn. Bạn thử inspect container sẽ thấy tham số

CI_PROJECT_DIR chính là thư mục bạn đang đứng. Khi đó bạn đã set permission cho folder này rồi. Nên user trong db có thể truy cập được.

Tuy vậy trong bài này bạn chạy docker-compose up qua gitlab-runner user (thường là root). Khi đó

CI_PROJECT_DIR="/builds/maitrungduc1410/cicd-auto-deploy"

và user trong db ko có quyền truy cập vào đây => service không khởi động được.

0

Sư phụ xin hãy nhận đệ tử một lạy

+1
thg 10 8, 2020 10:08 SA

Bạn đang chạy gitlab runner với user james (1000:1000) và container db cũng set user 1000:1000 ...

@thungrac43 thì tất nhiên rồi bạn, đây không phải là điều kiện lý tưởng mà là điều kiện cần mà mình đã nói rất rõ ở bài chạy container với non root user đó là user trong container phải có quyền bằng với user môi trường ngoài - người sở hữu folder mount volume.

0
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí