How does Docker scratch image support musl?

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP











up vote
0
down vote

favorite












I've created a simple Docker image which is completely raw with single binary copied and run:



FROM scratch
COPY ./target/release/hello_docker /
CMD ["/hello_docker"]


My compiler (Rust) by default creates binaries which dynamically load glibc and use it as their libc library. There is also a special flag, which makes binaries use musl.



On my Ubuntu 18.04 both binaries run flawlessly. I assume, that it provides support for both libc implementations, but I couldn't find a definitive confirmation.



But when I run these binaries in a scratch Docker image, only the musl version works. Glibc is not installed, so obviously it can't be loaded in runtime and crashes the application. But why does the musl version work?



I've read that most of musl is in the statically linked part, but there is also a tiny dynamically loaded part, which provides code for the specific kernel version. But there is nothing installed, where does this dynamic shim come from?










share|improve this question

























    up vote
    0
    down vote

    favorite












    I've created a simple Docker image which is completely raw with single binary copied and run:



    FROM scratch
    COPY ./target/release/hello_docker /
    CMD ["/hello_docker"]


    My compiler (Rust) by default creates binaries which dynamically load glibc and use it as their libc library. There is also a special flag, which makes binaries use musl.



    On my Ubuntu 18.04 both binaries run flawlessly. I assume, that it provides support for both libc implementations, but I couldn't find a definitive confirmation.



    But when I run these binaries in a scratch Docker image, only the musl version works. Glibc is not installed, so obviously it can't be loaded in runtime and crashes the application. But why does the musl version work?



    I've read that most of musl is in the statically linked part, but there is also a tiny dynamically loaded part, which provides code for the specific kernel version. But there is nothing installed, where does this dynamic shim come from?










    share|improve this question























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      I've created a simple Docker image which is completely raw with single binary copied and run:



      FROM scratch
      COPY ./target/release/hello_docker /
      CMD ["/hello_docker"]


      My compiler (Rust) by default creates binaries which dynamically load glibc and use it as their libc library. There is also a special flag, which makes binaries use musl.



      On my Ubuntu 18.04 both binaries run flawlessly. I assume, that it provides support for both libc implementations, but I couldn't find a definitive confirmation.



      But when I run these binaries in a scratch Docker image, only the musl version works. Glibc is not installed, so obviously it can't be loaded in runtime and crashes the application. But why does the musl version work?



      I've read that most of musl is in the statically linked part, but there is also a tiny dynamically loaded part, which provides code for the specific kernel version. But there is nothing installed, where does this dynamic shim come from?










      share|improve this question













      I've created a simple Docker image which is completely raw with single binary copied and run:



      FROM scratch
      COPY ./target/release/hello_docker /
      CMD ["/hello_docker"]


      My compiler (Rust) by default creates binaries which dynamically load glibc and use it as their libc library. There is also a special flag, which makes binaries use musl.



      On my Ubuntu 18.04 both binaries run flawlessly. I assume, that it provides support for both libc implementations, but I couldn't find a definitive confirmation.



      But when I run these binaries in a scratch Docker image, only the musl version works. Glibc is not installed, so obviously it can't be loaded in runtime and crashes the application. But why does the musl version work?



      I've read that most of musl is in the statically linked part, but there is also a tiny dynamically loaded part, which provides code for the specific kernel version. But there is nothing installed, where does this dynamic shim come from?







      docker glibc






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked 6 hours ago









      CodeSandwich

      82




      82

























          active

          oldest

          votes











          Your Answer







          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "106"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          convertImagesToLinks: false,
          noModals: false,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













           

          draft saved


          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f474370%2fhow-does-docker-scratch-image-support-musl%23new-answer', 'question_page');

          );

          Post as a guest



































          active

          oldest

          votes













          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes















           

          draft saved


          draft discarded















































           


          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f474370%2fhow-does-docker-scratch-image-support-musl%23new-answer', 'question_page');

          );

          Post as a guest













































































          Popular posts from this blog

          How to check contact read email or not when send email to Individual?

          Displaying single band from multi-band raster using QGIS

          How many registers does an x86_64 CPU actually have?