Yes, in fact your answer made me wonder about my config(and reference
docs that I use, but that's my prob..:) ).
Not to add to the confusion, but I use minishift, so a local cluster
environment. Current OC version is 3.6.0 and Docker is 1.12.
However I run my Docker tests on a separate installation which is the
version that I've posted...17.12.
If OShift injects its */from/* instruction in the "right" place, *I'd
guess* the behaviour - when using /ARG/s as first instructions in the
Dockerfile - would be something like:
- if docker daemon is 17.06 or newer (if the top voted reply here is
right
https://stackoverflow.com/questions/40273070/docker-build-arg-in-source-file),
the build process will work with OShift (don't know starting with what
version), but the /FROM/ in Dockerfile will be replaced with the /from/
in OShift's BuildConfig; the very first /ARG/ instructions will just be
ignored(??)
- if daemon is pre 17.06, OShift's build will crash as the Docker build
will crash, when not using /FROM/ as the very first instruction in the
Dockerfile
But now it's just guessing from my part. If/when I have the time I'll
try to do some tests.
For the time being no ARGs prior to FROM for me. :)
Thanks again for the help, Ben!
On 08.02.2018 23:01, Ben Parees wrote:
On Thu, Feb 8, 2018 at 3:53 PM, Dan Pungă <dan.pu...@gmail.com
<mailto:dan.pu...@gmail.com>> wrote:
I guess it does have to do with your Docker version.
I have:
Client:
Version: 17.12.0-ce
API version: 1.35
Go version: go1.9.2
Git commit: c97c6d6
Built: Wed Dec 27 20:11:19 2017
OS/Arch: linux/amd64
Server:
Engine:
Version: 17.12.0-ce
API version: 1.35 (minimum version 1.12)
Go version: go1.9.2
Git commit: c97c6d6
Built: Wed Dec 27 20:09:53 2017
OS/Arch: linux/amd64
Experimental: false
Yes, found this in the reference manual:
https://docs.docker.com/v1.13/engine/reference/builder/#/from
<https://docs.docker.com/v1.13/engine/reference/builder/#/from>
"/As such, a valid////|Dockerfile|//must have//|FROM|////as its
first instruction/"
while for 17.12, it appears they have relaxed this requirement.
Based on that, I would expect whatever behavior you're observing is
driven by the docker daemon version on your openshift cluster nodes.
On 08.02.2018 17:19, Ben Parees wrote:
On Wed, Feb 7, 2018 at 10:30 AM, Dan Pungă <dan.pu...@gmail.com
<mailto: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-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
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: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
<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
--
Ben Parees | OpenShift
--
Ben Parees | OpenShift
_______________________________________________
users mailing list
users@lists.openshift.redhat.com
http://lists.openshift.redhat.com/openshiftmm/listinfo/users