2016-11-06 3 views
1

У меня есть нижний файл Docker для zookeeper, и я пытаюсь создать для него образ, но он дает мне ошибку. Недавно я начал работать с Docker и начал играть с установкой Zookeeper, поэтому я не могу понять. Что означает эта ошибка?/bin/sh: 1: apk: не найдено при создании изображения докеров

FROM ubuntu:trusty 
MAINTAINER David 

RUN apt-get update && apt-get install -y openjdk-7-jre-headless wget 
ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64 

# Install required packages 
RUN apk add --no-cache \ 
    bash \ 
    su-exec 

ENV ZOO_USER=zookeeper \ 
    ZOO_CONF_DIR=/conf \ 
    ZOO_DATA_DIR=/data \ 
    ZOO_DATA_LOG_DIR=/datalog \ 
    ZOO_PORT=2181 \ 
    ZOO_TICK_TIME=2000 \ 
    ZOO_INIT_LIMIT=5 \ 
    ZOO_SYNC_LIMIT=2 

# Add a user and make dirs 
RUN set -x \ 
    && adduser -D "$ZOO_USER" \ 
    && mkdir -p "$ZOO_DATA_LOG_DIR" "$ZOO_DATA_DIR" "$ZOO_CONF_DIR" \ 
    && chown "$ZOO_USER:$ZOO_USER" "$ZOO_DATA_LOG_DIR" "$ZOO_DATA_DIR" "$ZOO_CONF_DIR" 

ARG GPG_KEY=C823E3E5B12AF29C67F81976F5CECB3CB5E9BD2D 
ARG DISTRO_NAME=zookeeper-3.4.9 

# Download Apache Zookeeper, verify its PGP signature, untar and clean up 
RUN set -x \ 
    && apk add --no-cache --virtual .build-deps \ 
     gnupg \ 
    && wget -q "http://www.apache.org/dist/zookeeper/$DISTRO_NAME/$DISTRO_NAME.tar.gz" \ 
    && wget -q "http://www.apache.org/dist/zookeeper/$DISTRO_NAME/$DISTRO_NAME.tar.gz.asc" \ 
    && export GNUPGHOME="$(mktemp -d)" \ 
    && gpg --keyserver ha.pool.sks-keyservers.net --recv-key "$GPG_KEY" \ 
    && gpg --batch --verify "$DISTRO_NAME.tar.gz.asc" "$DISTRO_NAME.tar.gz" \ 
    && tar -xzf "$DISTRO_NAME.tar.gz" \ 
    && mv "$DISTRO_NAME/conf/"* "$ZOO_CONF_DIR" \ 
    && rm -r "$GNUPGHOME" "$DISTRO_NAME.tar.gz" "$DISTRO_NAME.tar.gz.asc" \ 
    && apk del .build-deps 

WORKDIR $DISTRO_NAME 
VOLUME ["$ZOO_DATA_DIR", "$ZOO_DATA_LOG_DIR"] 

EXPOSE $ZOO_PORT 2888 3888 

ENV PATH=$PATH:/$DISTRO_NAME/bin \ 
    ZOOCFGDIR=$ZOO_CONF_DIR 

COPY docker-entrypoint.sh/
ENTRYPOINT ["/docker-entrypoint.sh"] 
CMD ["zkServer.sh", "start-foreground"] 

Ниже ошибка я получил:

Step 4 : ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64 
---> Running in a49507cb9725 
---> 77b37883caf4 
Removing intermediate container a49507cb9725 
Step 5 : RUN apk add --no-cache  bash  su-exec 
---> Running in a4fd76a644cf 
/bin/sh: 1: apk: not found 
The command '/bin/sh -c apk add --no-cache  bash  su-exec' returned a non-zero code: 127 

я делаю что-то неправильно здесь? Почему apk не найден?

+3

'apk' - это менеджер пакетов для Alpine. Вы используете Ubuntu. Вам нужно использовать 'apt-get'. – larsks

+3

[Это] (https://sookocheff.com/post/docker/containerizing-zookeeper-a-guided-tour/) выглядит как статья, которая может быть очень похожа на то, что вы пытаетесь сделать. – larsks

+0

@larsks благодарит за указание на ошибку. Итак, вы говорите, что я должен заменить apk' 'apt-get' в моем файле Docker, и он должен работать? Я хочу сохранить свой тег FROM как есть. – john

ответ

3

Как larsks mentions, apk для Apline распределений и вы выбрали FROM ubuntu:trusty, который Debian основан командой apt-get. Измените свою строку FROM на FROM alpine:3.4, чтобы перейти к альпийскому изображению с поддержкой apk.

+0

аах теперь я понял. Но, допустим, я хочу сохранить 'FROM ubuntu: trusty' строку, то что мне нужно изменить? Поэтому я должен заменить apk '' apt-get' всюду в моем файле Docker, чтобы он работал? – john

+0

Переход на другой инструмент для упаковки, который указывает на его собственные репозитории, означает различный синтаксис и разные имена пакетов. [вторая ссылка larsks] (http://stackoverflow.com/questions/40445243/bin-sh-1-apk-not-found-while-creating-docker-image/40445482?noredirect=1#comment68137377_40445243) дает ответ на что. – BMitch

Смежные вопросы