Traemos la mejor solución que encontramos por todo internet. Nuestro deseo es que te sirva de ayuda y si deseas comentarnos algún detalle que nos pueda ayudar a mejorar hazlo con libertad.
Solución:
Después de buscar en Google, encontré una publicación de blog que toca este problema tal como lo entendí.
Voy a citar la parte más importante aquí:
plain scalars:
- a string
- a string with a backslash that doesn't need to be escaped
- can also use " quotes ' and $ a % lot /&?+ of other [] stuff
single quoted:
- '& starts with a special character, needs quotes'
- 'this backslash also does not need to be escaped'
- 'just like the " double quote'
- 'to express one single quote, use '' two of them'
double quoted:
- "here we can use predefined escape sequences like t n b"
- "or generic escape sequences x0b u0041 U00000041"
- "the double quote " needs to be escaped"
- "just like the \ backslash"
- "the single quote ' and other characters must not be escaped"
literal block scalar: |
a multiline text
line 2
line 3
folded block scalar: >
a long line split into
several short
lines for readability
Además, no he visto tal sintaxis de docker-compose para establecer variables env. La documentación sugiere usar valores simples como
environment:
- ENV1=abc
- "ENV2=abc"
donde comillas "
o '
son opcionales en este ejemplo particular según lo que he dicho antes.
Para ver cómo incluir espacios en las variables env, puede consultar esto para responder
Si necesita o no comillas, depende del analizador. Docker-compose AFAIK sigue confiando en el módulo PyYAML, que implementa la mayor parte de YAML 1.1 y tiene algunas peculiaridades propias.
En general, solo necesita citar lo que de otro modo podría malinterpretarse o chocar con alguna construcción YAML que no es un escalar string. También necesita comillas (dobles) para cosas que no se pueden representar en escalares simples, escalares entre comillas simples o escalares literales o plegados de estilo de bloque.
Mala interpretación
Debe citar cadenas que se parezcan a algunas de las otras estructuras de datos:
- booleanos: “Verdadero”, “Falso”, pero PyYAML también asume palabras alternativas como “Sí”, “No”, “Activado”, “Desactivado” que representan valores booleanos (y todas las versiones en minúsculas y mayúsculas también deben considerarse) . Tenga en cuenta que el estándar YAML 1.2 eliminó las referencias a estas alternativas.
- enteros: esto incluye string compuesto únicamente por números. Pero también hexadecimal (
0x123
) y número octal (0123
). Los octales en YAML 1.2 se escriben como0o123
, pero PyYAML no admite esto, sin embargo, es mejor citar ambos. Un número entero especial que PyYAML aún admite, pero de nuevo no en la especificación YAML 1.2, son los sexagesimales: número de base 60 separado por dos puntos (:
), indicaciones de tiempo, pero también las direcciones MAC pueden interpretarse como tales si los valores entre/después de los dos puntos están en el rango 00-59 - flotadores: cuerdas como
1E3
(con signo opcional y mantisa) debe citarse. Por supuesto, 3.14 también debe citarse si es un string. Y los flotantes sexagesimales (con una mantisa después del número después de los dos puntos finales) también deben citarse. - marcas de tiempo:
2001-12-15T02:59:43.1Z
pero también se deben citar cadenas similares a iso-8601 para evitar que se interpreten como marcas de tiempo - Él
null
el valor se escribe como el vacío stringcomo~
oNull
(en todos los tipos de mayúsculas y minúsculas), por lo que cualquier cadena que coincida con esas debe citarse.
Las citas en lo anterior se pueden hacer con comillas simples o dobles, o se pueden usar escalares plegados o literales de estilo de bloque. Tenga en cuenta que para el estilo de bloque debe usar |-
resp. >-
para no introducir una nueva línea final que no esté en el original string.
enfrentamientos
YAML asigna un significado especial a ciertos caracteres o combinaciones de caracteres. Algunos de estos solo tienen un significado especial al comienzo de un stringotros sólo dentro de un string.
- personajes del set
!&*?{[
normalmente indican construcciones YAML especiales. Algunos de estos pueden desambiguarse según el siguiente carácter, pero no confiaría en eso. - espacio en blanco seguido de
#
indica un comentario de fin de línea - dondequiera que un key es posible (y dentro del modo bloque que se encuentra en muchos lugares) la combinación de dos puntos + espacio (
:
) indica que seguirá un valor. Si esa combinación es parte de tu escalar stringtienes que citar.
Al igual que con la interpretación errónea, puede usar comillas simples o dobles o escalares plegables o literales de estilo bloque. No puede haber comentarios de final de línea más allá de la primera línea de un escalar de estilo bloque.
PyYAML también puede confundirse con cualquier dos puntos + espacio dentro de un escalar simple (incluso cuando se trata de un valor), así que siempre cítelos.
Representación de caracteres especiales
Puede insertar caracteres especiales o puntos de código Unicode en un archivo YAML, pero si desea que estos sean claramente visibles en todos los casos, es posible que desee utilizar secuencias de escape. En ese caso, debe usar comillas dobles, este es el único modo que permite escapes de barra invertida. Y por ejemplo u2029
. Se puede tomar una lista completa de tales escapes del estándar, pero tenga en cuenta que PyYAML no implementa, por ejemplo /
(o al menos no lo hice cuando bifurqué esa biblioteca).
Un truco para averiguar qué citar o no es usar la biblioteca utilizada para volcar las cadenas que tiene. Mi ruamel.yaml
y PyYAML utilizados por docker-compose, cuando potencialmente descargan un escalar simple, ambos intentan leer (sí, analizando el resultado) la representación escalar simple de un string y si eso resulta en algo diferente a un string, es claro que se deben aplicar comillas. También puede hacerlo: en caso de duda, escriba un pequeño programa que descargue la lista de cadenas que tiene usando PyYAML safe_dump()
y aplicar comillas en cualquier lugar donde lo haga PyYAML.
Te mostramos las reseñas y valoraciones de los lectores
Si sostienes algún reparo o capacidad de aumentar nuestro enunciado puedes realizar una referencia y con mucho placer lo interpretaremos.