Docker如何从环境文件传递多行环境变量?解决证书仅识别首行问题
环境文件中多行环境变量的正确写法
处理多行证书这类环境变量,常用以下几种方法:
方法1:反斜杠\续行
在每一行末尾添加反斜杠,标记后续行属于当前变量的内容。注意反斜杠必须是该行最后一个字符,后面不能有空格或其他符号。
示例:
DB_HOST=localhost MY_CERT="-----BEGIN CERTIFICATE-----\ MIICqDCCAZACCQCW5Qr0o0sFZjANBgkqhkiG9w0BAQsFADCBlDCCAUwGCSqGSIb3 DQEJARYYQWRtaW5pc3RyYXRvcjE5OTA1MDNAZ21haWwuY29tMQswCQYDVQQGEwJV UzELMAkGA1UECAwCTlkxCzAJBgNVBAcMAlVUMQswCQYDVQQKDAJTRTEKMAgGA1UE CwwBRVMxCzAJBgNVBAMMAkNBMB4XDTE5MDUwMzE4MTQ1N1oXDTIwMDUwMjE4MTQ1 N1owgYQxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJOWTEOMAwGA1UEBxMFVVMxDjAM BgNVBAoTBU5BTUUxEDAOBgNVBAsTB05BTUUgRzEUMBIGA1UEAxMLZXhhbXBsZS5j b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7Vh5z5t4a3X6W8e6 -----END CERTIFICATE-----"
方法2:Heredoc语法(适用于Shell脚本)
如果是在Shell脚本中定义环境变量,可以用Heredoc语法直接包裹多行内容,避免手动转义。单引号包裹的EOF会阻止变量替换,保证证书内容完全原样保存。
示例:
MY_CERT=$(cat << 'EOF' -----BEGIN CERTIFICATE----- MIICqDCCAZACCQCW5Qr0o0sFZjANBgkqhkiG9w0BAQsFADCBlDCCAUwGCSqGSIb3 DQEJARYYQWRtaW5pc3RyYXRvcjE5OTA1MDNAZ21haWwuY29tMQswCQYDVQQGEwJV UzELMAkGA1UECAwCTlkxCzAJBgNVBAcMAlVUMQswCQYDVQQKDAJTRTEKMAgGA1UE CwwBRVMxCzAJBgNVBAMMAkNBMB4XDTE5MDUwMzE4MTQ1N1oXDTIwMDUwMjE4MTQ1 N1owgYQxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJOWTEOMAwGA1UEBxMFVVMxDjAM BgNVBAoTBU5BTUUxEDAOBgNVBAsTB05BTUUgRzEUMBIGA1UEAxMLZXhhbXBsZS5j b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7Vh5z5t4a3X6W8e6 -----END CERTIFICATE----- EOF )
方法3:转义换行符为\n
把证书的换行替换成\n,将多行内容压缩为单行。这种方式适合要求变量必须单行的环境,需要确保读取变量的程序能正确解析\n为实际换行。
示例:
MY_CERT="-----BEGIN CERTIFICATE-----\nMIICqDCCAZACCQCW5Qr0o0sFZjANBgkqhkiG9w0BAQsFADCBlDCCAUwGCSqGSIb3\nDQEJARYYQWRtaW5pc3RyYXRvcjE5OTA1MDNAZ21haWwuY29tMQswCQYDVQQGEwJV\nUzELMAkGA1UECAwCTlkxCzAJBgNVBAcMAlVUMQswCQYDVQQKDAJTRTEKMAgGA1UE\nCwwBRVMxCzAJBgNVBAMMAkNBMB4XDTE5MDUwMzE4MTQ1N1oXDTIwMDUwMjE4MTQ1\nN1owgYQxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJOWTEOMAwGA1UEBxMFVVMxDjAM\nBgNVBAoTBU5BTUUxEDAOBgNVBAsTB05BTUUgRzEUMBIGA1UEAxMLZXhhbXBsZS5j\nb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7Vh5z5t4a3X6W8e6\n-----END CERTIFICATE-----"
内容的提问来源于stack exchange,提问作者kumar
相关产品推荐
相关产品推荐

