Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dockerfile生成成功,但容器无法运行_Docker_Dockerfile_Varnish - Fatal编程技术网

Dockerfile生成成功,但容器无法运行

Dockerfile生成成功,但容器无法运行,docker,dockerfile,varnish,Docker,Dockerfile,Varnish,我为varnish plus写了一份dockerfile。Docker build成功执行,但Docker运行时显示/bin/sh:1:./init:not found not found.Docker文件缺少什么 我正在尝试为Kubernetes varnish部署构建自定义docker构建 我尝试了另一个参数,比如CMD[“sh”,“init”],然后我得到了./start代理失败。如果我把sh放到/etc/default/varnish错误上找不到的地方。也得到了初始化完成错误,它说期待“

我为varnish plus写了一份dockerfile。Docker build成功执行,但Docker运行时显示
/bin/sh:1:./init:not found not found.
Docker文件缺少什么

我正在尝试为Kubernetes varnish部署构建自定义docker构建

我尝试了另一个参数,比如CMD[“sh”,“init”],然后我得到了./start代理失败。如果我把sh放到/etc/default/varnish错误上找不到的地方。也得到了初始化完成错误,它说期待“然后”。我以同样的方式安装在裸机上,但无法在docker容器上运行

FROM ubuntu:16.04
ARG varnishFile
ARG tokenName
ARG Project
ARG varnishPlusCredential="xxx"
RUN echo "  $tokenName, $Project, $varnishFile "
RUN apt-get update
RUN apt-get -y install \
  git \
  python \
  apt-transport-https \
  wget  \
  curl \
  gnupg2 \
  libmicrohttpd10 \
  libssl1.0.0 \
  vim \
  telnet
RUN wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch |  apt-key add -
RUN echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" |  tee /etc/apt/sources.list.d/elastic-5.x.list

RUN curl https://${varnishPlusCredential}@repo.varnish-software.com/GPG-key.txt | apt-key add -
RUN echo "deb http://${varnishPlusCredential}@repo.varnish-software.com/ubuntu trusty varnish-4.1-plus" >> /etc/apt/sources.list 
RUN echo "deb http://${varnishPlusCredential}@repo.varnish-software.com/ubuntu trusty non-free" >>  /etc/apt/sources.list 

RUN echo "  #apt-get update "
RUN apt-get update -y 
RUN apt-get -y install \
    varnish-plus \
    varnish-plus-ha \
    varnish-agent \
    filebeat \
    varnishtuner
   
RUN vha-generate-vcl --token ${tokenName} > /etc/varnish/vha.vcl

COPY /${Project}/varnishConfiguration/nodes.conf /etc/varnish/nodes.conf
COPY /${Project}/varnishConfiguration/default.vcl /etc/varnish/vcl/default.vcl
COPY /${Project}/varnishConfiguration/varnish /etc/default/varnish
COPY /${Project}/varnishConfiguration/varnishncsa /etc/default/varnishncsa
COPY /"${Project}"/varnishConfiguration/varnishncsa-init.d/varnishncsa /etc/init.d

#Copy varnish configuration varnish files for varnish nodes
COPY /${Project}/${varnishFile}/varnish-agent /etc/default/varnish-agent
COPY /${Project}/${varnishFile}/vha-agent /etc/default/vha-agent

COPY /${Project}/filebeat/filebeat.yml /etc/filebeat/filebeat.yml

COPY /scripts/start-varnish-agent.sh /start-varnish-agent
COPY /scripts/start-varnish.sh /start-varnish 
COPY /scripts/start-vha-agent.sh /start-vha-agent
COPY /scripts/start-varnishncsa.sh  /start-varnishncsa
COPY /scripts/start-filebeat.sh /start-filebeat
COPY /scripts/init.sh /init

#Executive permisson to startup scripts
RUN chmod +x /init \
             /start-varnish-agent \
             /start-varnish \
             /start-vha-agent \
             /start-varnishncsa \
             /etc/init.d/varnishncsa \
             /start-filebeat
EXPOSE 80
EXPOSE 6082
EXPOSE 6085

CMD ./init
我的init.sh文件位于脚本文件夹下,与dockerfile位于同一位置

#!/bin/bash

# Start the varnish service
./start-varnish 
status=$?
if [ $status -ne 0 ]; then
  echo "Failed to start varnish service: $status"
  exit $status
fi

# Start the vha-agent
./start-vha-agent 
status=$?
if [ $status -ne 0 ]; then
  echo "Failed to start vha-agent: $status"
  exit $status
fi

# Start the varnish-agent
./start-varnish-agent 
status=$?
if [ $status -ne 0 ]; then
  echo "Failed to start varnish-agent: $status"
  exit $status
fi

# Start the varnishncsa
./start-varnishncsa 
status=$?
if [ $status -ne 0 ]; then
  echo "Failed to start varnishncsa: $status"
  exit $status
fi

# Start the filebeat
./start-filebeat 
status=$?
if [ $status -ne 0 ]; then
  echo "Failed to start filebeat: $status"
  exit $status
fi

while sleep 60; do
  ps aux |grep varnishd |grep -v "grep"
  PROCESS_1_STATUS=$?
  ps aux |grep vha-agent |grep -v "grep"
  PROCESS_2_STATUS=$?
  ps aux |grep varnish-agent |grep -v "grep"
  PROCESS_3_STATUS=$?
  ps aux |grep varnishncsa |grep -v "grep"
  PROCESS_4_STATUS=$?
  # If the greps above find anything, they exit with 0 status
  # If they are not both 0, then something is wrong
  if [ $PROCESS_1_STATUS -ne 0 -o $PROCESS_2_STATUS -ne 0 -o $PROCESS_3_STATUS -ne 0 -o $PROCESS_4_STATUS -ne 0 ]; then
    echo "One of the processes has already exited."
    exit 1
  fi
done

Varnish软件有一个正式的Varnish缓存和Docker映像。如果您有订阅,我怀疑您有,您可以通过以下途径获得支持帮助:support@varnish-软件网站

支持人员可以查看您的
Dockerfile
并向您提供建议,但他们也可以解释如何使用官方映像来完成工作,而无需自己维护
Dockerfile

这可能会起作用ENV PATH=“/:${PATH}”-更新您的PATH变量以在Dockerfile中包含脚本