diff --git a/Dockerfile b/Dockerfile index 63d3783f51..07cf8b5e04 100644 --- a/Dockerfile +++ b/Dockerfile @@ -56,6 +56,6 @@ RUN ldd /usr/local/srs/objs/ffmpeg/bin/ffmpeg && \ # Default workdir and command. WORKDIR /usr/local/srs -ENV SRS_DAEMON=off +ENV SRS_DAEMON=off SRS_IN_DOCKER=on CMD ["./objs/srs", "-c", "conf/docker.conf"] diff --git a/trunk/doc/CHANGELOG.md b/trunk/doc/CHANGELOG.md index e6db4a8e15..94d188e022 100644 --- a/trunk/doc/CHANGELOG.md +++ b/trunk/doc/CHANGELOG.md @@ -7,6 +7,7 @@ The changelog for SRS. ## SRS 6.0 Changelog +* v6.0, 2023-10-17, Merge [#3758](https://github.com/ossrs/srs/pull/3758): Refine docker detect mechenism. v6.0.90 (#3758) * v6.0, 2023-10-11, Merge [#3827](https://github.com/ossrs/srs/pull/3827): Fix bug for upgrading to OpenSSL 3.0. v6.0.89 (#3827) * v6.0, 2023-10-10, Merge [#3825](https://github.com/ossrs/srs/pull/3825): SRT: Fix the missing config mss. v6.0.88 (#3825) * v6.0, 2023-10-08, Merge [#3824](https://github.com/ossrs/srs/pull/3824): Solve the problem of inaccurate HLS TS duration. v6.0.87 (#3824) @@ -101,6 +102,7 @@ The changelog for SRS. ## SRS 5.0 Changelog +* v5.0, 2023-10-17, Merge [#3758](https://github.com/ossrs/srs/pull/3758): Refine docker detect mechenism. v5.0.190 (#3758) * v5.0, 2023-10-11, Merge [#3827](https://github.com/ossrs/srs/pull/3827): Fix bug for upgrading to OpenSSL 3.0. v5.0.189 (#3827) * v5.0, 2023-10-10, Merge [#3825](https://github.com/ossrs/srs/pull/3825): SRT: Fix the missing config mss. v5.0.188 (#3825) * v5.0, 2023-10-08, Merge [#3824](https://github.com/ossrs/srs/pull/3824): Solve the problem of inaccurate HLS TS duration. v5.0.187 (#3824) diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp index 3e03c82a78..172b2eaa33 100644 --- a/trunk/src/app/srs_app_config.cpp +++ b/trunk/src/app/srs_app_config.cpp @@ -94,6 +94,38 @@ bool is_common_space(char ch) return (ch == ' ' || ch == '\t' || ch == SRS_CR || ch == SRS_LF); } +extern bool _srs_in_docker; + +// Detect docker by https://stackoverflow.com/a/41559867 +srs_error_t srs_detect_docker() +{ + srs_error_t err = srs_success; + + _srs_in_docker = false; + + SrsFileReader fr; + if ((err = fr.open("/proc/1/cgroup")) != srs_success) { + return err; + } + + ssize_t nn; + char buf[1024]; + if ((err = fr.read(buf, sizeof(buf), &nn)) != srs_success) { + return err; + } + + if (nn <= 0) { + return err; + } + + string s(buf, nn); + if (srs_string_contains(s, "/docker")) { + _srs_in_docker = true; + } + + return err; +} + namespace srs_internal { SrsConfigBuffer::SrsConfigBuffer() @@ -1934,6 +1966,19 @@ srs_error_t SrsConfig::parse_options(int argc, char** argv) if (root->directives.empty()) root->get_or_create("vhost", "__defaultVhost__"); } + // Ignore any error while detecting docker. + if ((err = srs_detect_docker()) != srs_success) { + srs_error_reset(err); + } + + // Try to load the config if docker detect failed. + if (!_srs_in_docker) { + _srs_in_docker = _srs_config->get_in_docker(); + if (_srs_in_docker) { + srs_trace("enable in_docker by config"); + } + } + //////////////////////////////////////////////////////////////////////// // check log name and level //////////////////////////////////////////////////////////////////////// @@ -2856,7 +2901,7 @@ string SrsConfig::argv() bool SrsConfig::get_daemon() { - SRS_OVERWRITE_BY_ENV_BOOL2("srs.daemon"); + SRS_OVERWRITE_BY_ENV_BOOL2("srs.daemon"); // SRS_DAEMON SrsConfDirective* conf = root->get("daemon"); if (!conf || conf->arg0().empty()) { @@ -6520,8 +6565,6 @@ string SrsConfig::get_ingest_input_url(SrsConfDirective* conf) return conf->arg0(); } -extern bool _srs_in_docker; - bool SrsConfig::get_log_tank_file() { if (!srs_getenv("srs.srs_log_tank").empty()) { // SRS_SRS_LOG_TANK diff --git a/trunk/src/core/srs_core_version5.hpp b/trunk/src/core/srs_core_version5.hpp index c4b5686a05..d6d5b78033 100644 --- a/trunk/src/core/srs_core_version5.hpp +++ b/trunk/src/core/srs_core_version5.hpp @@ -9,6 +9,6 @@ #define VERSION_MAJOR 5 #define VERSION_MINOR 0 -#define VERSION_REVISION 189 +#define VERSION_REVISION 190 #endif diff --git a/trunk/src/core/srs_core_version6.hpp b/trunk/src/core/srs_core_version6.hpp index a614245bc0..033e1007b6 100644 --- a/trunk/src/core/srs_core_version6.hpp +++ b/trunk/src/core/srs_core_version6.hpp @@ -9,6 +9,6 @@ #define VERSION_MAJOR 6 #define VERSION_MINOR 0 -#define VERSION_REVISION 89 +#define VERSION_REVISION 90 #endif diff --git a/trunk/src/main/srs_main_server.cpp b/trunk/src/main/srs_main_server.cpp index 519b7ef384..6bf06d1d30 100644 --- a/trunk/src/main/srs_main_server.cpp +++ b/trunk/src/main/srs_main_server.cpp @@ -57,7 +57,6 @@ using namespace std; // pre-declare srs_error_t run_directly_or_daemon(); srs_error_t run_in_thread_pool(); -srs_error_t srs_detect_docker(); void show_macro_features(); // @global log and context. @@ -79,6 +78,9 @@ bool _srs_config_by_env = false; // The binary name of SRS. const char* _srs_binary = NULL; +// @global Other variables. +bool _srs_in_docker = false; + // Free global data, for address sanitizer. extern void srs_free_global_system_ips(); @@ -131,11 +133,6 @@ srs_error_t do_main(int argc, char** argv, char** envp) #ifdef SRS_GPERF_MP #warning "gmp is not used for memory leak, please use gmc instead." #endif - - // Ignore any error while detecting docker. - if ((err = srs_detect_docker()) != srs_success) { - srs_error_reset(err); - } // never use srs log(srs_trace, srs_error, etc) before config parse the option, // which will load the log config and apply it. @@ -400,49 +397,10 @@ void show_macro_features() #endif } -// Detect docker by https://stackoverflow.com/a/41559867 -bool _srs_in_docker = false; -srs_error_t srs_detect_docker() -{ - srs_error_t err = srs_success; - - _srs_in_docker = false; - - SrsFileReader fr; - if ((err = fr.open("/proc/1/cgroup")) != srs_success) { - return err; - } - - ssize_t nn; - char buf[1024]; - if ((err = fr.read(buf, sizeof(buf), &nn)) != srs_success) { - return err; - } - - if (nn <= 0) { - return err; - } - - string s(buf, nn); - if (srs_string_contains(s, "/docker")) { - _srs_in_docker = true; - } - - return err; -} - srs_error_t run_directly_or_daemon() { srs_error_t err = srs_success; - // Try to load the config if docker detect failed. - if (!_srs_in_docker) { - _srs_in_docker = _srs_config->get_in_docker(); - if (_srs_in_docker) { - srs_trace("enable in_docker by config"); - } - } - // Load daemon from config, disable it for docker. // @see https://github.com/ossrs/srs/issues/1594 bool run_as_daemon = _srs_config->get_daemon();