@ZeroOne bạn xem bài chạy docker container với non-root user của mình nhé. Mình khuyến khích chạy với non-root user để tăng tính bảo mật cho container của bạn, nhưng nó cũng sẽ khó hơn nếu bạn chưa thực sự thành thục Docker
Làm đủ các bước tới cấu hình file haproxy.cfg xong thì nó báo backend backend_rancher has no server available!
Check log thì báo như thế này. ai biết do gì chỉ em với
Nếu bỏ dòng @Component thì class VNEngine sẽ không phải là bean, sẽ không được Spring tìm đến và sử dụng. Nên nó sẽ tìm các bean khác có implements Engine và inject vào. Còn nếu không tìm được class nào thì... bạn demo thử là biết thôi.
Nếu khi tạo module nào đó, mà module đó cần một module khác phụ thuộc, thì IoC sẽ tìm trong IoC container xem có không, nếu có thì inject vào, nếu chưa thì tạo mới, bỏ vào container và inject vào. Mình chưa hiểu nó sẽ tạo mới như nào?
@Component
class VNEngine implements Engine {
...
}
@Component
class Car {
// Tìm object tương ứng với Engine và chèn (inject) vào đây
@Autowired
private Engine engine;
}
Trường hợp này thì IoC container sẽ có VNEngine và nó sẽ tự động inject vào Engine trong class Car phải ko nhỉ? Nếu không có
@Component
class VNEngine implements Engine {
...
}
ở đoạn code trên thì nó sẽ tạo mới kiểu gi nhỉ? thanks ad
ở bài này thì container khi khởi động sẽ chạy dưới user root (vì trong Dockerfile ta ko nói gì tới USER), và khi bạn exec vào container để chạy command artisan thì nó cũng là root luôn -> file tạo ra dưới quyền root -> nhưng do ta đang mount volume sync môi trường ngoài và trong, nên ở môi trường ngoài bạn cũng sẽ thấy file đó dưới quyền root.
1 trong những cách nhanh đó là bạn cho user ở môi trường ngoài (local) của bạn về dưới group root là đc rồi
ở bài này thì container khi khởi động sẽ chạy dưới user root (vì trong Dockerfile ta ko nói gì tới USER), và khi bạn exec vào container để chạy command artisan thì nó cũng là root luôn -> file tạo ra dưới quyền root -> nhưng do ta đang mount volume sync môi trường ngoài và trong, nên ở môi trường ngoài bạn cũng sẽ thấy file đó dưới quyền root.
1 trong những cách nhanh đó là bạn cho user ở môi trường ngoài (local) của bạn về dưới group root là đc rồi
thật ra trong bài lúc đó mình làm hơi rườm ra, mình tự cài docker-compose. Thay vì đó ta có thể dùng trực tiếp image có docker-compose luôn. Ở dòng đầu tiên trong file .gitlab-ci.yml đổi thành:
image: docker/compose:1.29.2
Bạn có thể xem tag cho docker-compose ở đây. Và phần tự cài docker-compose bằng python (pip) ko cần nữa
THẢO LUẬN
qua hay
hay quá anh ạ ~~ tks anh vì bài viết chất lượng
Cảm ơn bạn vì đã góp ý nha, mình sẽ update thêm vào bài viết
@maitrungduc1410 Cảm ơn bạn😁
@ZeroOne bạn xem bài chạy docker container với non-root user của mình nhé. Mình khuyến khích chạy với non-root user để tăng tính bảo mật cho container của bạn, nhưng nó cũng sẽ khó hơn nếu bạn chưa thực sự thành thục Docker
@maitrungduc1410 cảm ơn bạn. Cho mình hỏi thêm nữa là nếu mình muốn đặt user trong dockerfile thì mình nên đặt nó như nào
@kiendev are you sure
))
Làm đủ các bước tới cấu hình file haproxy.cfg xong thì nó báo backend backend_rancher has no server available! Check log thì báo như thế này. ai biết do gì chỉ em với
thắc mắc đã dc giải đáp
@tonghoangvu nếu có nhiều bean implements Engine thì nó dựa vào đâu để inject bean tương ứng vậy ah?
@tonghoangvu cảm ơn ad.
Nếu bỏ dòng
@Componentthì classVNEnginesẽ không phải là bean, sẽ không được Spring tìm đến và sử dụng. Nên nó sẽ tìm các bean khác có implementsEnginevà inject vào. Còn nếu không tìm được class nào thì... bạn demo thử là biết thôi.Nếu khi tạo module nào đó, mà module đó cần một module khác phụ thuộc, thì IoC sẽ tìm trong IoC container xem có không, nếu có thì inject vào, nếu chưa thì tạo mới, bỏ vào container và inject vào. Mình chưa hiểu nó sẽ tạo mới như nào?
@Component class VNEngine implements Engine { ... }
@Component class Car { // Tìm object tương ứng với Engine và chèn (inject) vào đây @Autowired private Engine engine; }
Trường hợp này thì IoC container sẽ có VNEngine và nó sẽ tự động inject vào Engine trong class Car phải ko nhỉ? Nếu không có @Component class VNEngine implements Engine { ... } ở đoạn code trên thì nó sẽ tạo mới kiểu gi nhỉ? thanks ad
bài dịch của reactjs.org, đọc cả 2 sẽ dể hiểu hơn, cảm ơn b
Độ chính xác tuỳ theo model á bạn, nhưng theo công bố thì cũng cao á
kéo xuống dưới đọc luôn bản gốc cho nhanh
mng giúp em với ạ em bị lỗi can not find module './api/routes' làm thế nào để khắc phục ạ
ở bài này thì container khi khởi động sẽ chạy dưới user
root(vì trong Dockerfile ta ko nói gì tớiUSER), và khi bạnexecvào container để chạy commandartisanthì nó cũng là root luôn -> file tạo ra dưới quyềnroot-> nhưng do ta đang mount volume sync môi trường ngoài và trong, nên ở môi trường ngoài bạn cũng sẽ thấy file đó dưới quyềnroot.1 trong những cách nhanh đó là bạn cho user ở môi trường ngoài (local) của bạn về dưới group
rootlà đc rồiở bài này thì container khi khởi động sẽ chạy dưới user
root(vì trong Dockerfile ta ko nói gì tớiUSER), và khi bạnexecvào container để chạy commandartisanthì nó cũng là root luôn -> file tạo ra dưới quyềnroot-> nhưng do ta đang mount volume sync môi trường ngoài và trong, nên ở môi trường ngoài bạn cũng sẽ thấy file đó dưới quyềnroot.1 trong những cách nhanh đó là bạn cho user ở môi trường ngoài (local) của bạn về dưới group
rootlà đc rồicám ơn bạn nhé
thật ra trong bài lúc đó mình làm hơi rườm ra, mình tự cài docker-compose. Thay vì đó ta có thể dùng trực tiếp image có docker-compose luôn. Ở dòng đầu tiên trong file
.gitlab-ci.ymlđổi thành:Bạn có thể xem tag cho docker-compose ở đây. Và phần tự cài docker-compose bằng python (pip) ko cần nữa