Làm cách nào để thoát khỏi ký hiệu $ đô la trong tệp soạn thư docker?


91

Tôi có một vô hướng YAML đang gặp lỗi sau khi tôi cố gắng đánh giá docker-compose.ymltệp của mình :

LỖI: Định dạng nội suy không hợp lệ cho tùy chọn "môi trường" trong dịch vụ "time_service": "$ {Time.now}"

YAML:

---
version: '2'
services:
  time_service:
    build: "."
    environment:
      TIME: "${Time.now}"

Làm cách nào để duy trì đầu ra chuỗi giống như đã viết, nhưng tránh để trình soạn thảo giải thích nó là nội suy chuỗi bị lỗi?


1
Nó không phải là trình phân tích cú pháp YAML đang diễn giải chuỗi đó. YAML không biết về ${}. Việc thông dịch được thực hiện bởi docker-composevà được viết bằng Python, vì vậy thẻ ruby ​​cũng không phù hợp.
Anthon

Tôi đã loại bỏ giả định không chính xác rằng đây là sự cố YAML. Nó gây ra ít nhất một người khác để được lừa dối và lãng phí thời gian
Anthon

Câu trả lời:


132

Bạn có thể sử dụng $$(ký hiệu hai đô la) khi cấu hình của bạn cần một ký hiệu đô la theo nghĩa đen.

Bạn đang đánh vào phân vùng docker-composebiến, được ghi lại ở đây :

Cả hai $VARIABLE${VARIABLE}cú pháp đều được hỗ trợ. Các tính năng kiểu shell mở rộng, chẳng hạn như ${VARIABLE-default}${VARIABLE/foo/bar}, không được hỗ trợ.

Bạn có thể sử dụng $$(ký hiệu hai đô la) khi cấu hình của bạn cần một ký hiệu đô la theo nghĩa đen. Điều này cũng ngăn Soạn nội suy một giá trị, vì vậy a $$cho phép bạn tham chiếu đến các biến môi trường mà bạn không muốn Soạn xử lý.

docker-composeđược viết bằng Python, như bạn thấy trên github , cơ chế nhân đôi để có được ý nghĩa ban đầu của các ký tự đặc biệt có thể được tìm thấy trong nhiều chương trình, tôi cần phải tự mình sử dụng điều này, trong khi lập trình, từ năm 1984.


38

Tìm thấy câu trả lời bằng cách sao chép gợi ý cho các %ký tự trong bài đăng này

Nó yêu cầu một ký hiệu đô la kép $$.

Vì vậy, tôi cần "$${Time.now}", đánh giá"${Time.now}"

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.