Docker-compose尝试一次执行多个RUN

时间:2015-12-07 12:22:25

标签: docker dockerfile docker-compose

我有这个docker app结构:

docker-compose.yml

lanti-debian-base:
  build: ./debian
  container_name: lanti-debian-base
  ports:
    - "8080:80"
    - "8081:443"
    - "8082:22"
lanti-debian-web:
  build: ./web
  container_name: lanti-debian-web
  ports:
    - "8080:80"
    - "8081:443"
    - "8082:22"
  volumes:
    - "/home/core/www:/var/www:rw"

debian/Dockerfile

# Lanti/DebianBase
#
# VERSION               1.0.0

FROM debian:latest
MAINTAINER Istvan Lantos <info@xxxxx.com>
LABEL Description="This image is the base of the other app images in this project" Vendor="Istvan Lantos" Version="1.0"

ENV TERM linux
ENV DEBIAN_FRONTEND noninteractive
RUN ln -sf /bin/bash /bin/sh && ln -sf /bin/bash /bin/sh.distrib

RUN echo -e \
"deb http://httpredir.debian.org/debian stable main contrib non-free\n\
deb-src http://httpredir.debian.org/debian stable main contrib non-free\n\
deb http://security.debian.org stable/updates main contrib non-free\n\
deb-src http://security.debian.org stable/updates main contrib non-free\n\
deb http://httpredir.debian.org/debian stable-updates main contrib non-free\n\
deb-src http://httpredir.debian.org/debian stable-updates main contrib non-free" > /etc/apt/sources.list
RUN apt-get -y update \
    && time apt-get -y dist-upgrade \
    && apt-get -y --force-yes install --fix-missing \
        dialog \
        apt-utils \
        sudo \
        supervisor \
        openssh-server \

### Start of OpenSSH setup
RUN mkdir /var/run/sshd
RUN mkdir /root/.ssh
COPY root/.ssh/authorized_keys /root/.ssh/
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
RUN echo -e '\ncd /root' >> /root/.bashrc
### End of OpenSSH setup

### Start of Last Cleanup
RUN apt-get -y install -f; \
    apt-get -y --purge autoremove; \
    apt-get autoclean; \
    apt-get clean; \
    apt-get check
### End of Last Cleanup

EXPOSE 80 443 22

CMD ["/bin/bash"]

web/Dockerfile

# Lanti/DebianWeb
#
# VERSION               1.0.0

FROM lemp_lanti-debian-base:latest
MAINTAINER Istvan Lantos <info@xxxxx.com>
LABEL Description="Nginx + PHP-FPM 7 through FastCGI" Vendor="Istvan Lantos" Version="1.0"

RUN echo 'export PATH="$PATH:/usr/local/php7/bin:/usr/local/php7/sbin"' >> /etc/bash.bashrc

RUN echo -e \
"deb http://nginx.org/packages/mainline/debian/ jessie nginx\n\
deb-src http://nginx.org/packages/mainline/debian/ jessie nginx" > /etc/apt/sources.list.d/nginx.list
RUN echo -e \
"deb http://repos.zend.com/zend-server/early-access/php7/repos ubuntu/" > /etc/apt/sources.list.d/php.list
RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
RUN apt-get -y update \
    && time apt-get -y dist-upgrade \
    && apt-get -y --force-yes install --fix-missing \
        nginx \
        php7-nightly

### Start of Nginx setup
COPY etc/nginx/conf.d/default.conf /etc/nginx/conf.d/
COPY etc/nginx/conf.d/php.conf /etc/nginx/conf.d/
# NGINX WEBSERVER FILES
RUN mkdir /var/www
COPY usr/share/nginx/html/404.html /usr/share/nginx/html/
# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log
RUN ln -sf /dev/stderr /var/log/nginx/error.log
# Allow Nginx to access /var/run/php-fpm.sock
RUN usermod -aG www-data nginx
#VOLUME ["/var/cache/nginx"]
### End of Nginx setup

### Start of PHP 7 setup
COPY usr/local/php7/etc/php.ini /usr/local/php7/etc/
COPY usr/local/php7/etc/php-fpm.conf /usr/local/php7/etc/
COPY usr/local/php7/etc/php-fpm.d/www.conf /usr/local/php7/etc/php-fpm.d/
RUN mkdir /var/log/php-fpm
### End of PHP 7 setup

COPY etc/supervisor/conf.d/supervisord.conf /etc/supervisor/conf.d/
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]

这个Dockerfiles作为单个Dockerfile完美执行,但是当我切入这两个Dockerfile并尝试用docker-compose up执行它时,它只是在这一行失败,同时更新,升级搞砸了。不安装软件包而不刷新dpkg:

Building lanti-debian-base
Step 1 : FROM debian:latest
 ---> 23cb15b0fcec
Step 2 : MAINTAINER Istvan Lantos <info@xxxxx.com>
 ---> Using cache
 ---> fa6331df3cab
Step 3 : ENV TERM linux
 ---> Using cache
 ---> e0dcbacf1ba3
Step 4 : ENV DEBIAN_FRONTEND noninteractive
 ---> Using cache
 ---> 579776fc2c0e
Step 5 : RUN ln -sf /bin/bash /bin/sh && ln -sf /bin/bash /bin/sh.distrib
 ---> Running in 7ebf6bbe4cac
 ---> 886e36f8f807
Removing intermediate container 7ebf6bbe4cac
Step 6 : RUN echo -e "deb http://httpredir.debian.org/debian stable main contrib non-free\ndeb-src http://httpredir.debian.org/debian stable main contrib non-free\ndeb http://security.debian.org stable/updates main contrib non-free\ndeb-src http://security.debian.org stable/updates main contrib non-free\ndeb http://httpredir.debian.org/debian stable-updates main contrib non-free\ndeb-src http://httpredir.debian.org/debian stable-updates main contrib non-free" > /etc/apt/sources.list
 ---> Running in 0088ad3ff110
 ---> 9bfeed9678af
Removing intermediate container 0088ad3ff110
Step 7 : RUN apt-get -y update     && time apt-get -y dist-upgrade     && apt-get -y --force-yes install --fix-missing         dialog         apt-utils         sudo         supervisor         openssh-server RUN mkdir /var/run/sshd
 ---> Running in 20cc1d018913
Get:1 http://security.debian.org stable/updates InRelease [63.1 kB]
Ign http://httpredir.debian.org stable InRelease
Get:2 http://httpredir.debian.org stable-updates InRelease [136 kB]
Get:3 http://httpredir.debian.org stable Release.gpg [2373 B]
Get:4 http://httpredir.debian.org stable Release [148 kB]
Get:5 http://security.debian.org stable/updates/main Sources [137 kB]
Get:6 http://security.debian.org stable/updates/contrib Sources [1302 B]
Get:7 http://security.debian.org stable/updates/non-free Sources [20 B]
Get:8 http://httpredir.debian.org stable-updates/main Sources [2311 B]
Get:9 http://security.debian.org stable/updates/main amd64 Packages [207 kB]
Get:10 http://httpredir.debian.org stable-updates/contrib Sources [20 B]
Get:11 http://httpredir.debian.org stable-updates/non-free Sources [20 B]
Get:12 http://httpredir.debian.org stable-updates/main amd64 Packages [3619 B]
Get:13 http://security.debian.org stable/updates/contrib amd64 Packages [2365 B]
Get:14 http://httpredir.debian.org stable-updates/contrib amd64 Packages [20 B]
Get:15 http://security.debian.org stable/updates/non-free amd64 Packages [20 B]
Get:16 http://httpredir.debian.org stable-updates/non-free amd64 Packages [20 B]
Get:17 http://httpredir.debian.org stable/main Sources [9149 kB]
Get:18 http://httpredir.debian.org stable/contrib Sources [59.6 kB]
Get:19 http://httpredir.debian.org stable/non-free Sources [119 kB]
Get:20 http://httpredir.debian.org stable/main amd64 Packages [9035 kB]
Get:21 http://httpredir.debian.org stable/contrib amd64 Packages [59.5 kB]
Get:22 http://httpredir.debian.org stable/non-free amd64 Packages [101 kB]
Fetched 19.2 MB in 25s (752 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

real    0m3.448s
user    0m2.140s
sys     0m1.021s
Reading package lists...
Building dependency tree...
Reading state information...
E: Unable to locate package RUN
E: Unable to locate package mkdir
E: Unable to locate package /var/run
ERROR: Service 'lanti-debian-base' failed to build: The command '/bin/sh -c apt-get -y update     && time apt-get -y dist-upgrade     && apt-get -y --force-yes install --fix-missing         dialog         apt-utils         sudo         supervisor         openssh-server RUN mkdir /var/run/sshd' returned a non-zero code: 100

看起来它正在尝试使用下一个命令apt-get执行RUN mkdir /var/run/sshd。那是为什么?

1 个答案:

答案 0 :(得分:3)

  

看起来它正在尝试使用下一个命令apt-get执行RUN mkdir /var/run/sshd。那是为什么?

由于前一个\命令末尾有RUN apt-get

apt-get -y --force-yes install --fix-missing \
        dialog \
        apt-utils \
        sudo \
        supervisor \
        openssh-server \ <====

### Start of OpenSSH setup
RUN mkdir /var/run/sshd

迫使码头工作者考虑包含下一个指针(RUN mkdir one

的多行