मैं अमेज़ॅन लोचदार कंटेनर सेवा के माध्यम से जंग और रॉकेट के माध्यम से एक एपीआई प्रदान कर रहा हूं। जब भी मैं अमेज़न S3 के लिए रखा या वस्तुओं मिलता है, यह स्थानीय स्तर पर अच्छा काम करता है, लेकिन अगर अमेज़न ईसीएस पर तैनात है, मैं इस रन-टाइम त्रुटि हो रही है:डॉकर और "ओपनएसएसएल लाइब्रेरी ने एक त्रुटि की सूचना दी" जब तैनात
HttpDispatch(HttpDispatchError { message: "The OpenSSL library reported an error" })
यह भी होता है जब मैं पर डोकर छवि चलाने मेरी मशीन।
use super::types::SomeCustomType;
use rusoto_core::{DefaultCredentialsProvider, Region, default_tls_client};
use rusoto_s3::{S3, S3Client, GetObjectRequest};
pub fn load_data_from_s3(object_name: String) -> SomeCustomType {
let credentials = DefaultCredentialsProvider::new().unwrap();
let client = S3Client::new(default_tls_client().unwrap(), credentials, Region::UsWest2);
let mut request = GetObjectRequest::default();
request.bucket = "bucket-name".to_string();
request.key = object_name.to_string();
match client.get_object(&request) {
// *** This is going to fail in docker container on run-time ***
Ok(file) => {
// this part is actually not important for this example,
// so code has been omitted
someCustomType
}
Err(e) => {
println!("{:?}", e); // *** errors out here! ***
SomeCustomType::default()
}
}
}
Cargo.toml
[dependencies]
brotli="1.0.8"
chrono = "0.3.1"
fnv = "1.0.5"
rusted_cypher = "1.1.0"
rocket = { git = "https://github.com/SergioBenitez/Rocket", rev = "614297eb9bc8fa5d9c54f653dc35b8cc3a22891f" }
rocket_codegen = { git = "https://github.com/SergioBenitez/Rocket", rev = "614297eb9bc8fa5d9c54f653dc35b8cc3a22891f" }
rocket_contrib = { git = "https://github.com/SergioBenitez/Rocket", rev = "614297eb9bc8fa5d9c54f653dc35b8cc3a22891f" }
rusoto_core = "0.25.0"
rusoto_s3 = "0.25.0"
serde = "1.0.8"
serde_json = "1.0.2"
serde_derive = "1.0.8"
यह कैसे मैं MacOS पर डोकर छवि का निर्माण है:
cargo clean &&
docker run -v $PWD:/volume -w /volume -t manonthemat/muslrust cargo build --release &&
docker build -t dockerimagename .
मैं कहाँ त्रुटि हो रहा है टिप्पणी जोड़ दिया है
डॉकर छवि मैनंटम at/muslrust अनिवार्य रूप से क्लक्स/muslrust है। मुझे अपनी खुद की छवि बनाना पड़ा क्योंकि मुझे हाल ही में जंग का निर्माण करने की आवश्यकता थी।
यह (सरलीकृत) Dockerfile जो है अब तक मेरे लिए महान काम कर रहा है:
FROM scratch
ADD target/x86_64-unknown-linux-musl/release/project/
CMD ["/project"]
चीजें मैं समस्या को हल करने की कोशिश की है में से कुछ ....
openssl = "0.9.14"
को Cargo.toml में जोड़ा गया।इस के लिए मेरे Dockerfile बदलें:
FROM alpine:edge ADD target/x86_64-unknown-linux-musl/release/project/ RUN apk add --no-cache curl perl openssl-dev ca-certificates linux-headers build-base zsh CMD ["/project"]
यह भी कुछ भी परिवर्तन नहीं किया है, लेकिन मेरे अंदर देखने के लिए कुछ और विकल्प दे दी है।
मैं इस के लिए
cargo clean
के बाद पार संकलन कदम बदल दिया है:docker run -v $PWD:/volume -w /volume -e RUST_LOG="rusoto,hyper=debug" -e OPENSSL_STATIC=1 -e OPENSSL_DIR=/usr/local -t manonthemat/muslrust cargo build --release --features "logging"
के बाद नई डोकर छवियों बनाया गया था, एक खोल पाने:
docker run -i -e ROCKET_ENV=prod -e ROCKET_ADDRESS=0.0.0.0 -e RUST_LOG="rusoto,hyper=debug" dockerimagename /bin/zsh
वहाँ मैं उपलब्ध कराने के द्वारा अपने प्रोजेक्ट को मार डाला एसएसएल प्रमाणपत्रों का एक अलग पथ जो कि किसी भी अलग प्रभाव के साथ मौजूद नहीं है।
अगले समय में, मैं इसे एक अलग रास्ता को इंगित करने के लिए सेट:
SSL_CERT_DIR=/etc/ssl/certs /project
और मैं एक दिलचस्प परिणाम मिला, जबclient.get_object(&request)
कॉल की त्रुटि को प्रिंट:Unknown("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><AWSAccessKeyId>...
मैं साथ rusoto प्रतिस्थापित एडब्ल्यूएस-sdk-जंग टोकरा
thread 'main' panicked at 'Error dispatching request: HttpDispatchError { message: "the handshake failed" }', /checkout/src/libcore/result.rs:860 stack backtrace:
0: std::sys::imp::backtrace::tracing::imp::unwind_backtrace at ./checkout/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
1: std::sys_common::backtrace::_print at ./checkout/src/libstd/sys_common/backtrace.rs:71
2: std::panicking::default_hook::{{closure}} at ./checkout/src/libstd/sys_common/backtrace.rs:60
at ./checkout/src/libstd/panicking.rs:355
3: std::panicking::default_hook
at ./checkout/src/libstd/panicking.rs:371
4: std::panicking::rust_panic_with_hook
at ./checkout/src/libstd/panicking.rs:549
5: std::panicking::begin_panic
at ./checkout/src/libstd/panicking.rs:511
6: std::panicking::begin_panic_fmt
at ./checkout/src/libstd/panicking.rs:495
7: rust_begin_unwind
at ./checkout/src/libstd/panicking.rs:471
8: core::panicking::panic_fmt
at ./checkout/src/libcore/panicking.rs:69
9: core::result::unwrap_failed
10: <aws_sdk_rust::aws::s3::s3client::S3Client<P, D>>::get_object
11: himitsu::ingest::load_data_from_s3
12: himitsu::ingest::load_data
13: himitsu::main
14: __rust_maybe_catch_panic
at ./checkout/src/libpanic_unwind/lib.rs:98
15: std::rt::lang_start
at ./checkout/src/libstd/panicking.rs:433
at ./checkout/src/libstd/panic.rs:361
at ./checkout/src/libstd/rt.rs:59
मैं जमाना मेरे मैक पर वर्चुअलबॉक्स के माध्यम से एक लिनक्स वितरण का नेतृत्व किया, अद्यतन पुस्तकालयों, ओपनएसएसएल हेडर और जंग स्थापित किया, फिर परियोजना आयात की। अब मुझे तुरंत हस्ताक्षरDoesNotMatch त्रुटि मिल रही है। मैंने सत्यापित किया कि मैं होस्ट मशीन के वीपीएन के माध्यम से https के माध्यम से एक नियो 4j सर्वर तक पहुंच सकता हूं, इसलिए एसएसएल कम से कम भागों में काम करता प्रतीत होता है।
संकलन और अमेज़न ईसीएस-अनुकूलित अमेज़न लिनक्स एएमआई 2017.03.a कार्यों पर परियोजना चल रहा है। डॉकर छवि कार्यों का निर्माण भी। के रूप में यह
standard_init_linux.go:178: exec user process caused "no such file or directory"
साथ देता है, भले ही फ़ाइल नहीं है, सही अनुमतियां हैं, यह आदि पर अन्य कार्यों चला सकते हैं ... बस इसे क्रियान्वित नहीं कि इस प्रणाली के भीतर से डोकर छवि चल रहा है, ऐसा नहीं करता। यह भी मामला है जब पिछले राज्य में वापस रोलिंग है जिसमें कोई S3/OpenSSL निर्भरता नहीं है। यहscratch
औरalpine
आधार छवियों के लिए सच है। लेकिन, अगर मैंubuntu
आधार छवि के रूप में साथ डोकर छवि का निर्माण, मैं पूर्व S3/OpenSSL संस्करण का प्रदर्शन शुरू। रुसूटो के साथ संस्करण के लिए, ओपनएसएसएल लाइब्रेरी और उसके हेडर इंस्टॉल करते समय भी मुझे ओपनएसएसएल त्रुटि मिल जाएगी।अपने Mac पर डोकर छवि संकलित, निजी रेपो को धक्का दे हब डोकर करने के लिए। ईसी 2 इंस्टेंस पर एसएसएच सत्र के माध्यम से उस डॉकर छवि को खींच लिया (6 में से एक जैसा)। अब यह चल रहा है मुझे "ऐसी कोई फ़ाइल या निर्देशिका" 6 में के रूप में त्रुटि है, लेकिन अच्छा ol '
HttpDispatch(HttpDispatchError { message: "The OpenSSL library reported an error" })
नहीं देता है (अब भी जब SSL_CERTS_DIR =/etc/ssl/कंटेनर के वातावरण में प्रमाणपत्र गुजर)
प्लस वन। कुछ कोड के साथ एक डॉकर सवाल! – jww