Tôi thấy mình đang ở trong tình huống muốn tắt tạm thời một dịch vụ trong một docker-compose
tệp.
Tất nhiên là tôi có thể bình luận, nhưng có cách nào để chỉ nói " enabled: false
" không?
Tôi thấy mình đang ở trong tình huống muốn tắt tạm thời một dịch vụ trong một docker-compose
tệp.
Tất nhiên là tôi có thể bình luận, nhưng có cách nào để chỉ nói " enabled: false
" không?
--no-deps
trong trường hợp bạn không muốn bắt đầu các phụ thuộc. Tôi biết không phải là những gì bạn đang tìm kiếm, nhưng là một cách khác.
docker-compose -f docker-compose.yml -f another-docker-compose.yml up -d
. Bạn có thể kiểm tra kết quả hợp nhất soạn thư docker bằng lệnh cấu hình :docker-compose -f docker-compose.yml -f another-docker-compose.yml config
Câu trả lời:
Bạn có thể chỉ cần xác định lại entrypoint
hoặccommand
để thay thế lệnh đã nói bằng lệnh nào đó không có tác dụng gì ( /bin/true
)
Điều đó sẽ làm cho container thoát ra ngay lập tức, không làm gì cả.
shadi thêm các mẹo sau trong các nhận xét:
Nếu bạn không muốn dịch vụ được xây dựng, hãy xác định lại khóa xây dựng để trỏ đến khóa
Dockerfile
chỉ có:
FROM tianon/true
ENTRYPOINT ["/true"]
5andr0 chỉ ra trong phần nhận xét , phần cấp cao nhấtx-disabled:
(giống như trường mở rộng)
Tiện lợi hơn rất nhiều: chuyển các dịch vụ bị vô hiệu hóa sang phần cấp cao nhất
x-disabled:
thay vìservices:
Các phần có
x-
tiền tố sẽ được phân tích cú pháp, nhưng bị bỏ qua nếu không được sử dụng theo cách dự định như một trường mở rộng.
restart: "no"
để tránh khởi động lại vô hạn
x-disabled:
thay vìservices:
Bạn có thể làm điều đó trong một docker-compose.override.yaml
tệp.
Tệp này được tự động đọc docker-compose
và hợp nhất vào tệp chính docker-compose.yaml
.
Nếu bạn đã loại trừ nó khỏi Git, mỗi nhà phát triển có thể điều chỉnh cấu hình (với một vài hạn chế) mà không thay đổi cấu hình gốc docker-compose.yaml
.
Vì vậy, dịch vụ foo
có thể bị vô hiệu hóa đặc biệt bằng cách xác định lại điểm nhập của nó trong docker-compose.override.yaml
:
version: "3"
services:
foo:
entrypoint: ["echo", "Service foo disabled"]
export XXX_ENTRYPOINT=/bin/true
docker-compo v3, chúng ta có thể sử dụng env để vô hiệu hóa dịch vụ, tức là: sau đó là `entrypoint: [" $ {XXX_ENTRYPOINT: -docker-entrypoint.sh} "]`
Tôi thêm dòng bổ sung sau vào dịch vụ mà tôi muốn tạm thời vô hiệu hóa:
command: echo "{put your service name here} disabled"
Nó bắt đầu bằng cách nào, nhưng không làm gì cả.
command
lại không ảnh hưởng đến điểm vào lệnh. Trong ví dụ của bạn, bạn dựa vào đó entrypoint
là bash
tôi đoán. Để làm cho điều này có khả năng phục hồi ((không phụ thuộc vào tích hợp sẵn entrypoint
), tôi nghĩ bạn cần xác định lại điểm vào chứ không phải lệnh.
Không có cách nào để vô hiệu hóa một dịch vụ được xác định trong tệp soạn thảo Docker yaml. Đề xuất của VonC là một giải pháp tốt Vui lòng xem bên dưới tài liệu soạn docker để biết các tùy chọn có sẵn https://docs.docker.com/compose/compose-file/
Tôi sẽ mở rộng dịch vụ thành 0 bản sao với: deploy: bản sao: 0
Thật không may, như tài liệu nói rằng điều này chỉ hoạt động với đàn docker.
Nguyên thủy nhưng thêm một #
ở đầu mỗi dòng của dịch vụ.
docker-compose up
nó sẽ khởi động tất cả các dịch vụ theo mặc định. Tuy nhiên, nếu bạn chạydocker-compose up myservice
nó sẽ khởi động dịch vụ thần bí và những thứ phụ thuộc vào nó. Bằng cách thiết lập các phần phụ thuộc, bạn có thể thực hiện nó để dịch vụ xấu không bắt đầu bằng lệnh này. Bạn cũng có thể làmdocker-compose run
để chỉ nhận được các dịch vụ bạn muốn. Lựa chọn phù hợp cũng có thể là chia nó thành nhiều tệp soạn để cho phép bạn linh hoạt cần thiết.