Docker containers out of same image don't work as expected











up vote
1
down vote

favorite












I have a docker-compose.yml set up like this:



app:
build:
dockerfile: ./docker/app/Dockerfile.dev
image: test/test:${ENV}-test-app
...


Dockerfile called here has this line present:



...
RUN ln -s ../overrides/${ENV}/plugins ../plugins
...


And there is also a script I am running to get the whole environment up (it is dependant upon several containers so I tried to omit irrelevant info).



It is a bash script and running the following:



ENV=$1 docker-compose -p $1 up -d --force-recreate --build app


What I wanted to achieve is that i can run two app containers at the same time, and this works as follows:



sh initializer.sh foo -> creates foo-test-app container
sh initializer.sh bar -> creates bar-test-app container


Now the issue I'm having is that even when I have --force-recreate flag present two images created actually are seen as the same image with two different tags.



And what this does when I inspect the containers is that both containers have a symbolic link to:



overrides/foo/plugins


It doesn't notice when I create the new container to re-do that part. How can I fix it?



Also if I sh to one container and change the symbolic link, it is automatically changed in the other container as well.










share|improve this question




























    up vote
    1
    down vote

    favorite












    I have a docker-compose.yml set up like this:



    app:
    build:
    dockerfile: ./docker/app/Dockerfile.dev
    image: test/test:${ENV}-test-app
    ...


    Dockerfile called here has this line present:



    ...
    RUN ln -s ../overrides/${ENV}/plugins ../plugins
    ...


    And there is also a script I am running to get the whole environment up (it is dependant upon several containers so I tried to omit irrelevant info).



    It is a bash script and running the following:



    ENV=$1 docker-compose -p $1 up -d --force-recreate --build app


    What I wanted to achieve is that i can run two app containers at the same time, and this works as follows:



    sh initializer.sh foo -> creates foo-test-app container
    sh initializer.sh bar -> creates bar-test-app container


    Now the issue I'm having is that even when I have --force-recreate flag present two images created actually are seen as the same image with two different tags.



    And what this does when I inspect the containers is that both containers have a symbolic link to:



    overrides/foo/plugins


    It doesn't notice when I create the new container to re-do that part. How can I fix it?



    Also if I sh to one container and change the symbolic link, it is automatically changed in the other container as well.










    share|improve this question


























      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      I have a docker-compose.yml set up like this:



      app:
      build:
      dockerfile: ./docker/app/Dockerfile.dev
      image: test/test:${ENV}-test-app
      ...


      Dockerfile called here has this line present:



      ...
      RUN ln -s ../overrides/${ENV}/plugins ../plugins
      ...


      And there is also a script I am running to get the whole environment up (it is dependant upon several containers so I tried to omit irrelevant info).



      It is a bash script and running the following:



      ENV=$1 docker-compose -p $1 up -d --force-recreate --build app


      What I wanted to achieve is that i can run two app containers at the same time, and this works as follows:



      sh initializer.sh foo -> creates foo-test-app container
      sh initializer.sh bar -> creates bar-test-app container


      Now the issue I'm having is that even when I have --force-recreate flag present two images created actually are seen as the same image with two different tags.



      And what this does when I inspect the containers is that both containers have a symbolic link to:



      overrides/foo/plugins


      It doesn't notice when I create the new container to re-do that part. How can I fix it?



      Also if I sh to one container and change the symbolic link, it is automatically changed in the other container as well.










      share|improve this question















      I have a docker-compose.yml set up like this:



      app:
      build:
      dockerfile: ./docker/app/Dockerfile.dev
      image: test/test:${ENV}-test-app
      ...


      Dockerfile called here has this line present:



      ...
      RUN ln -s ../overrides/${ENV}/plugins ../plugins
      ...


      And there is also a script I am running to get the whole environment up (it is dependant upon several containers so I tried to omit irrelevant info).



      It is a bash script and running the following:



      ENV=$1 docker-compose -p $1 up -d --force-recreate --build app


      What I wanted to achieve is that i can run two app containers at the same time, and this works as follows:



      sh initializer.sh foo -> creates foo-test-app container
      sh initializer.sh bar -> creates bar-test-app container


      Now the issue I'm having is that even when I have --force-recreate flag present two images created actually are seen as the same image with two different tags.



      And what this does when I inspect the containers is that both containers have a symbolic link to:



      overrides/foo/plugins


      It doesn't notice when I create the new container to re-do that part. How can I fix it?



      Also if I sh to one container and change the symbolic link, it is automatically changed in the other container as well.







      docker docker-compose dockerfile






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 2 hours ago

























      asked 2 hours ago









      Norgul

      1,51611538




      1,51611538
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          0
          down vote













          $ENV in your dockerfile is not the same as the one in your compose file.



          When you run docker-compose up, it can be roughly seen as a docker build followed by a docker run. So Docker builds the image, layer by layer, at that stage there is not env called ENV. Only at docker run will $ENV be used.



          Environment variables at build stage can be used though, they are passed via ARG



          // compose.yml
          build:
          context: frontend
          args:
          - BUILD_ENV=${BUILD_ENV}

          // dockerfile
          ARG BUILD_ENV
          RUN ./node_modules/.bin/ng build --$BUILD_ENV


          You can do this to solve your problem however this will create one image per project, which you may not want. Or you can do it in an entrypoint script.






          share|improve this answer





















          • How does it initialize the first time if it is not the same $ENV?
            – Norgul
            2 hours ago






          • 1




            I don't know, I guess you have it set in other script? Anyway, if you add a build ARG, it will invalidate the cache and create a new build which solves your problem
            – Siyu
            1 hour ago











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          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: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














           

          draft saved


          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53371479%2fdocker-containers-out-of-same-image-dont-work-as-expected%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          up vote
          0
          down vote













          $ENV in your dockerfile is not the same as the one in your compose file.



          When you run docker-compose up, it can be roughly seen as a docker build followed by a docker run. So Docker builds the image, layer by layer, at that stage there is not env called ENV. Only at docker run will $ENV be used.



          Environment variables at build stage can be used though, they are passed via ARG



          // compose.yml
          build:
          context: frontend
          args:
          - BUILD_ENV=${BUILD_ENV}

          // dockerfile
          ARG BUILD_ENV
          RUN ./node_modules/.bin/ng build --$BUILD_ENV


          You can do this to solve your problem however this will create one image per project, which you may not want. Or you can do it in an entrypoint script.






          share|improve this answer





















          • How does it initialize the first time if it is not the same $ENV?
            – Norgul
            2 hours ago






          • 1




            I don't know, I guess you have it set in other script? Anyway, if you add a build ARG, it will invalidate the cache and create a new build which solves your problem
            – Siyu
            1 hour ago















          up vote
          0
          down vote













          $ENV in your dockerfile is not the same as the one in your compose file.



          When you run docker-compose up, it can be roughly seen as a docker build followed by a docker run. So Docker builds the image, layer by layer, at that stage there is not env called ENV. Only at docker run will $ENV be used.



          Environment variables at build stage can be used though, they are passed via ARG



          // compose.yml
          build:
          context: frontend
          args:
          - BUILD_ENV=${BUILD_ENV}

          // dockerfile
          ARG BUILD_ENV
          RUN ./node_modules/.bin/ng build --$BUILD_ENV


          You can do this to solve your problem however this will create one image per project, which you may not want. Or you can do it in an entrypoint script.






          share|improve this answer





















          • How does it initialize the first time if it is not the same $ENV?
            – Norgul
            2 hours ago






          • 1




            I don't know, I guess you have it set in other script? Anyway, if you add a build ARG, it will invalidate the cache and create a new build which solves your problem
            – Siyu
            1 hour ago













          up vote
          0
          down vote










          up vote
          0
          down vote









          $ENV in your dockerfile is not the same as the one in your compose file.



          When you run docker-compose up, it can be roughly seen as a docker build followed by a docker run. So Docker builds the image, layer by layer, at that stage there is not env called ENV. Only at docker run will $ENV be used.



          Environment variables at build stage can be used though, they are passed via ARG



          // compose.yml
          build:
          context: frontend
          args:
          - BUILD_ENV=${BUILD_ENV}

          // dockerfile
          ARG BUILD_ENV
          RUN ./node_modules/.bin/ng build --$BUILD_ENV


          You can do this to solve your problem however this will create one image per project, which you may not want. Or you can do it in an entrypoint script.






          share|improve this answer












          $ENV in your dockerfile is not the same as the one in your compose file.



          When you run docker-compose up, it can be roughly seen as a docker build followed by a docker run. So Docker builds the image, layer by layer, at that stage there is not env called ENV. Only at docker run will $ENV be used.



          Environment variables at build stage can be used though, they are passed via ARG



          // compose.yml
          build:
          context: frontend
          args:
          - BUILD_ENV=${BUILD_ENV}

          // dockerfile
          ARG BUILD_ENV
          RUN ./node_modules/.bin/ng build --$BUILD_ENV


          You can do this to solve your problem however this will create one image per project, which you may not want. Or you can do it in an entrypoint script.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered 2 hours ago









          Siyu

          841416




          841416












          • How does it initialize the first time if it is not the same $ENV?
            – Norgul
            2 hours ago






          • 1




            I don't know, I guess you have it set in other script? Anyway, if you add a build ARG, it will invalidate the cache and create a new build which solves your problem
            – Siyu
            1 hour ago


















          • How does it initialize the first time if it is not the same $ENV?
            – Norgul
            2 hours ago






          • 1




            I don't know, I guess you have it set in other script? Anyway, if you add a build ARG, it will invalidate the cache and create a new build which solves your problem
            – Siyu
            1 hour ago
















          How does it initialize the first time if it is not the same $ENV?
          – Norgul
          2 hours ago




          How does it initialize the first time if it is not the same $ENV?
          – Norgul
          2 hours ago




          1




          1




          I don't know, I guess you have it set in other script? Anyway, if you add a build ARG, it will invalidate the cache and create a new build which solves your problem
          – Siyu
          1 hour ago




          I don't know, I guess you have it set in other script? Anyway, if you add a build ARG, it will invalidate the cache and create a new build which solves your problem
          – Siyu
          1 hour ago


















           

          draft saved


          draft discarded



















































           


          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53371479%2fdocker-containers-out-of-same-image-dont-work-as-expected%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          MongoDB - Not Authorized To Execute Command

          How to fix TextFormField cause rebuild widget in Flutter

          Npm cannot find a required file even through it is in the searched directory