On Wed, Feb 7, 2018 at 10:30 AM, Dan Pungă <dan.pu...@gmail.com> wrote:
> Thanks for your answers Ben! > > And yes, apparently, I've skimmed through the docs with this bit, which > explains why the devs didn't have to implement handling ARGs before the > FROM instructions in Dockerfiles... :) So I'll just have to point to > different images in the yaml config. > > Regarding the first reply and example, the ARG instruction has scope > within Dockerfile. So, in your second example, the OS_name is available > just for the FROM instruction, after which it losses scope. You have to > redefine it to use it after the FROM. However the --build-arg overwrites > all references: > > ARG OS_name="centos" > ARG OS_version="7" > > FROM $OS_name:$OS_version > > ARG OS_version="foobar" > > RUN echo $OS_version > RUN exit 1 > ============= > > $*docker build .* ##so with default values for ARG taken into > consideration > This fails for me. And not because of the exit 1(which is intentional so we can see the echo output): $ cat Dockerfile ARG OS_name="centos" ARG OS_version="7" FROM $OS_name:$OS_version ARG OS_version="foobar" RUN echo $OS_version RUN exit 1 $ docker build . Sending build context to Docker daemon 3.072 kB *Step 1/6 : ARG OS_name="centos"Please provide a source image with `from` prior to commit* $ docker version Client: Version: 1.13.1 API version: 1.26 Package version: docker-1.13.1-44.git584d391.fc27.x86_64 Go version: go1.9.1 Git commit: caba767-unsupported Built: Thu Nov 23 21:17:26 2017 OS/Arch: linux/amd64 Server: Version: 1.13.1 API version: 1.26 (minimum version 1.12) Package version: docker-1.13.1-44.git584d391.fc27.x86_64 Go version: go1.9.1 Git commit: caba767-unsupported Built: Thu Nov 23 21:17:26 2017 OS/Arch: linux/amd64 Experimental: false Sending build context to Docker daemon 2.048kB > Step 1/6 : ARG OS_name="centos" > Step 2/6 : ARG OS_version="7" > Step 3/6 : FROM $OS_name:$OS_version > ---> ff426288ea90 > Step 4/6 : ARG OS_version="foobar" > ---> Running in b5ac67ae7fc5 > Removing intermediate container b5ac67ae7fc5 > ---> 753bc14d3a4b > Step 5/6 : RUN echo $OS_version > ---> Running in 15c759544a4b > *foobar* > Removing intermediate container 15c759544a4b > ---> 0e1d41c4ddda > Step 6/6 : RUN exit 1 > ---> Running in 9dfc7176d6b9 > The command '/bin/sh -c exit 1' returned a non-zero code: 1 > > ============= > > $ *docker build -t tst --build-arg OS_version=6.9 .* ##the OS_version > passed as cmd option is taken into account in all scopes > Sending build context to Docker daemon 2.048kB > Step 1/6 : ARG OS_name="centos" > Step 2/6 : ARG OS_version="7" > Step 3/6 : FROM $OS_name:$OS_version > 6.9: Pulling from library/centos > 993c50d47469: Pull complete > Digest: sha256:5cf988fbf143af398f879bd626ee67 > 7da3f8d229049b7210790928a02613ab26 > Status: Downloaded newer image for *centos:6.9* > ---> fca4c61d0fa7 > Step 4/6 : ARG OS_version="foobar" > ---> Running in d58a5321aa65 > Removing intermediate container d58a5321aa65 > ---> d345fcd2fe46 > Step 5/6 : RUN echo $OS_version > ---> Running in a408a3cd16ee > *6.9* > Removing intermediate container a408a3cd16ee > ---> 2d8e5ee7cc03 > Step 6/6 : RUN exit 1 > ---> Running in 61b8011e52dd > The command '/bin/sh -c exit 1' returned a non-zero code: 1 > > > > On 07.02.2018 16:50, Ben Parees wrote: > > btw, openshift will happily substitute your FROM statement w/ an image > referenced by your BuildConfig, so if that's your goal, perhaps that is a > way to accomplish it. > > https://docs.openshift.org/latest/dev_guide/builds/build_ > strategies.html#docker-strategy-from > > On Wed, Feb 7, 2018 at 9:48 AM, Ben Parees <bpar...@redhat.com> wrote: > >> >> >> On Wed, Feb 7, 2018 at 6:59 AM, Dan Pungă <dan.pu...@gmail.com> wrote: >> >>> Hello all! >>> I've recently discovered and join this mailing list; hope I'm in the >>> right place. >>> I'm new to the OShift ecosystem, currently trying to develop a >>> configuration to containerize some apps. I'm using minishift local cluster >>> on a Ubuntu 16.04 machine (details below). >>> >>> I want to write a parametrized yaml template to configure the build >>> process for my layers (those with a dockerStrategy) with using(or, better >>> said connecting to ) the arguments defined in my Dockerfiles. I have found >>> that OShift doesn't support ARG instructions prior to the FROM one when it >>> reads the Dockerfile. >>> >> >> you sure even docker supports that? It's not working for me: >> >> this works (just using an arg generically and echoing it out): >> >> $ cat Dockerfile >> FROM centos >> ARG OS_name="centos" >> >> RUN echo $OS_name >> RUN exit 1 >> >> $ docker build --build-arg OS_name=centos . >> Sending build context to Docker daemon 2.048 kB >> Step 1/4 : FROM centos >> ---> ff426288ea90 >> Step 2/4 : ARG OS_name="centos" >> ---> Using cache >> ---> 59f6494cb002 >> Step 3/4 : RUN echo $OS_name >> ---> Running in 092e2600490e >> >> *centos * ---> 8a3f570a033c >> Removing intermediate container 092e2600490e >> Step 4/4 : RUN exit 1 >> ---> Running in 543cefc9eab8 >> The command '/bin/sh -c exit 1' returned a non-zero code: 1 >> >> This does not (not even referencing the arg in my FROM, just putting the >> ARG before FROM): >> $ cat Dockerfile >> ARG OS_name="centos" >> FROM centos >> >> RUN echo $OS_name >> RUN exit 1 >> >> $ docker build --build-arg OS_name=centos . >> Sending build context to Docker daemon 2.048 kB >> Step 1/4 : ARG OS_name="centos" >> Please provide a source image with `from` prior to commit >> >> >> >> So i think this is a docker restriction, not an openshift one. >> >> >> So, even if a docker build would run successfully with something like: >>> >>> ARG OS_name="centos" >>> ARG OS_version="6.8" >>> >>> FROM ${OS_name}:${OS_version} >>> #....rest of Dockerfile instructions... >>> >>> if I try to define in my yaml config >>> strategy: >>> dockerStrategy: >>> buildArgs: >>> - name: OS_name >>> value: "7" >>> >>> the build process does not work. >>> >>> Has anyone else come across this issue and how did you get around it? >>> What I'm trying to achieve is single configuration structure for multiple >>> versions, so I wouldn't have to write separate Docker configs for different >>> app versions. For example building a Java JRE layer on top of different OSs >>> with one file. >>> Thank you, >>> Dan >>> >>> PS: The closest thread regarding this issue that I've found in the >>> archive is https://lists.openshift.redhat.com/openshift-archives/users/ >>> 2017-January/msg00104.html >>> >>> Running env details: >>> >>> oc version >>> oc v3.6.0+c4dd4cf >>> kubernetes v1.6.1+5115d708d7 >>> features: Basic-Auth GSSAPI Kerberos SPNEGO >>> >>> Server https://192.168.99.100:8443 >>> openshift v3.6.0+c4dd4cf >>> kubernetes v1.6.1+5115d708d7 >>> ========= >>> >>> docker@minishift:~$ docker version >>> Client: >>> Version: 1.12.3 >>> API version: 1.24 >>> Go version: go1.6.3 >>> Git commit: 6b644ec >>> Built: Wed Oct 26 23:26:11 2016 >>> OS/Arch: linux/amd64 >>> >>> Server: >>> Version: 1.12.3 >>> API version: 1.24 >>> Go version: go1.6.3 >>> Git commit: 6b644ec >>> Built: Wed Oct 26 23:26:11 2016 >>> OS/Arch: linux/amd64 >>> >>> >>> _______________________________________________ >>> users mailing list >>> users@lists.openshift.redhat.com >>> http://lists.openshift.redhat.com/openshiftmm/listinfo/users >>> >>> >> >> >> -- >> Ben Parees | OpenShift >> >> > > > -- > Ben Parees | OpenShift > > > -- Ben Parees | OpenShift
_______________________________________________ users mailing list users@lists.openshift.redhat.com http://lists.openshift.redhat.com/openshiftmm/listinfo/users