2016-03-29 3 views
0

Я пытаюсь построить изображение докера с докер-ру в Дженкинсе.Docker build ubuntu: xenial issue

скриптах выглядит следующим образом:

# Let's build the toolchain-base-image 
from io import BytesIO 
from docker import Client 
from pprint import pprint 
import sys 

cli = Client(base_url="tcp://127.0.0.1:4243") 
#cli = Client(base_url='unix://var/run/docker.sock') 
GCC_VERSION_TAG="4_9" 
with open("/path/to/docker-" + GCC_VERSION_TAG + "-gcc-base-image-dockerfile", mode="r") as dockerfile: 
    f = BytesIO(dockerfile.read().encode('utf-8')) 
    try: 
     response = [pprint(line["stream"]) for line in cli.build(fileobj=f, nocache=False, rm=True, tag='gcc49/toolchain-base_'+GCC_VERSION_TAG, decode=True, pull=True)] 
    except: 
     raise IOError("Invalid Dockerfile!") 
    if response != "None": 
     pprint(response[0]) 

print "Create container" 
container = cli.create_container(image='gcc49/toolchain-base_' + GCC_VERSION_TAG + ':latest',stdin_open=True, tty=True, volumes=['/ssd', '/opt', '/nfs/'], host_config=cli.create_host_config(binds=['/ssd:/ssd:rw','/opt/:/opt:ro','/nfs:/nfs:rw'])) 
print "Start container" 
cli.start(container=container.get('Id')) 
log_stream_list = [] 
[log_stream_list.append(l) for l in cli.logs(container, stream=True)] 

print "".join(log_stream_list) 

Мой dockerfile выглядит следующим образом:

FROM ubuntu:16.04 
MAINTAINER Gino 
ENV CMAKE_TOOLCHAIN_FILE /path/to/toolchainfile.toolchain 
ENV SOURCE_DIR /path/to/src_root 
RUN apt-get update 
RUN apt-get install -y python-cheetah build-essential gcc-4.9 cmake 
RUN groupadd group 
RUN useradd -G group -m -s /bin/bash user 
RUN echo "user:user" | chpasswd 
ENV HOME /home/user 
ENV SHELL /bin/bash 
ENV JAVA_HOME /opt/jdk1.8.0_65/ 
RUN mkdir -p /home/user/docker-build 
WORKDIR /home/user/docker-build 
# Set permissions 
RUN chown -R user:group /home/* 
USER user 
# Start build on run 
ENTRYPOINT cmake -DBUILD_JAVA=0 -DCMAKE_BUILD_TYPE=DeveloperRelease -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DPROJECT_CONFIGURATION="[email protected]${SOURCE_DIR}/dir" ${SOURCE_DIR} && make -j4 

Мой вопрос:

15:37:27 [docker-test_job] $ python /tmp/hudson5834793409651253293.py 
15:37:29 u'Step 1 : FROM ubuntu:16.04\n' 
15:37:29 Traceback (most recent call last): 
15:37:29 File "/tmp/hudson5834793409651253293.py", line 15, in <module> 
15:37:29  raise IOError("Invalid Dockerfile!") 
15:37:29 IOError: Invalid Dockerfile! 
15:37:29 Build step 'Execute Python script' marked build as failure 
15:37:29 Stopping all containers 
15:37:29 Finished: FAILURE 

Когда я пытаюсь его с убунту: 14,04 это работает Очень хорошо. Есть идея? Спасибо за помощь!

Обновление: Дополнительная информация: Docker 1.5 + Ubuntu 12.04 LTS. Когда я бегу на консоли

docker build -t name/tag -f dockerfilename . 

он тоже работает и докер строит изображение, как ожидалось.

+0

ли вы попробовать с: ОТ убунту: последние Кроме того, почему бы не: с Явы: последние – Sabmit

+0

Если он работает в командной строке, то я подозреваю, что есть что-то в вашем скрипте. ** Однако ** Docker 1.5 больше не поддерживается Docker Hub, вы уверены, что сможете на самом деле * вытащить * 'ubuntu: 16.04' из Docker Hub? – thaJeztah

+1

@Sabmit 'ubuntu: последний' указывает на последний выпуск LTS; учитывая, что 16.04 еще не выпущен, ': latest' в настоящее время является псевдонимом для' 14.04', а не '16.04' – thaJeztah

ответ

1

он работает в настоящее время. Я понял, что не могу использовать pull=True. Я думаю, что код возврата> 0 возвращается, и Дженкинс интерпретирует его как ошибку. Спасибо за любую помощь. :) Ниже приведен код, который работает.

[pprint(line["stream"]) for line in cli.build(fileobj=f, nocache=False, rm=True, tag='gcc49/toolchain-base_'+GCC_VERSION_TAG, decode=True)] 

Update

Я был неправ. В верхней строке я пытаюсь сопоставить ключевой «поток». Но если докер потянет изображение. Такого ключа нет.

10:28:06 u'progress': u'[===================================>    ] 36.18 MB/50.84 MB', 
10:28:06 u'progressDetail': {u'current': 36175872, u'total': 50841331}, 
10:28:06 u'status': u'Extracting'} 

Теперь все ясно. :)

0

Я предполагаю, что вам нужно указать путь к файлу Docker (включая имя вашего файла Docker), в то время как в вашем скрипте python кажется, что вы предоставляете только каталог, в котором находится файл Docker. попытайтесь изменить ту часть

открыта ("/ путь/к/docker-" + GCC_VERSION_TAG + "-gcc-база-образ", режим = "г")»

к

открыт (»/путь/к/docker-»+ GCC_VERSION_TAG + "-gcc-база-изображение/dockerfilename", режим = "г")

и посмотреть, если он работает

+0

Привет, извините, docker- "+ GCC_VERSION_TAG +" -gcc-base-image уже является именем файла, я уже работал с другим файлом docker, где я только изменил версию ubuntu. Я обновил свой пост, чтобы сделать его более понятным, это файл докеров. :) – GinoHereIam