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 Nov 19 at 9:31

























      asked Nov 19 at 9:16









      Norgul

      1,52311540




      1,52311540
























          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
            Nov 19 at 9:55






          • 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
            Nov 19 at 10:11











          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
            Nov 19 at 9:55






          • 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
            Nov 19 at 10:11















          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
            Nov 19 at 9:55






          • 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
            Nov 19 at 10:11













          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 Nov 19 at 9:47









          Siyu

          1,274619




          1,274619












          • How does it initialize the first time if it is not the same $ENV?
            – Norgul
            Nov 19 at 9:55






          • 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
            Nov 19 at 10:11


















          • How does it initialize the first time if it is not the same $ENV?
            – Norgul
            Nov 19 at 9:55






          • 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
            Nov 19 at 10:11
















          How does it initialize the first time if it is not the same $ENV?
          – Norgul
          Nov 19 at 9:55




          How does it initialize the first time if it is not the same $ENV?
          – Norgul
          Nov 19 at 9:55




          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
          Nov 19 at 10:11




          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
          Nov 19 at 10:11


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          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

          Ottavio Pratesi

          Tricia Helfer

          15 giugno