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-argoverwrites
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
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:5cf988fbf143af398f879bd626ee677da3f8d229049b7210790928a02613ab26
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
<mailto:bpar...@redhat.com>> wrote:
On Wed, Feb 7, 2018 at 6:59 AM, Dan Pungă <dan.pu...@gmail.com
<mailto: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
<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
<mailto:users@lists.openshift.redhat.com>
http://lists.openshift.redhat.com/openshiftmm/listinfo/users
<http://lists.openshift.redhat.com/openshiftmm/listinfo/users>
--
Ben Parees | OpenShift
--
Ben Parees | OpenShift
_______________________________________________
users mailing list
users@lists.openshift.redhat.com
http://lists.openshift.redhat.com/openshiftmm/listinfo/users