docker—;运行nginx并非始终有效

docker—;运行nginx并非始终有效,nginx,docker,Nginx,Docker,出于学习目的,我创建了此Dockerfile: FROM ubuntu:16.10 RUN useradd -m --password=node node && \ apt-get update && \ apt-get upgrade -y && \ apt-get install -y curl && \ apt-get install -y openssl && \ apt-get ins

出于学习目的,我创建了此Dockerfile:

FROM ubuntu:16.10

RUN useradd -m --password=node node && \
  apt-get update && \
  apt-get upgrade -y && \
  apt-get install -y curl && \
  apt-get install -y openssl && \
  apt-get install -y nginx && \
  apt-get -qy autoremove

COPY . /home/node/xxx.com

RUN rm /etc/nginx/sites-enabled/default && \
  cd /etc/nginx/sites-enabled && \
  ln -s /home/node/xxx.com/xxx.nginx.conf default

WORKDIR /home/node

RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \
  apt-get install -y nodejs 

RUN curl -L https://get.rvm.io | bash -s stable && \
  /bin/bash -l -c "rvm requirements" && \
  /bin/bash -l -c "rvm install 2.0" && \
  /bin/bash -l -c "gem update --system" && \
  /bin/bash -l -c "gem install bundler --no-ri --no-rdoc" && \
  /bin/bash -l -c "gem install compass  --no-ri --no-rdoc" && \
  /bin/bash -l -c "gem install bootstrap -v 4.0.0.alpha6 --no-ri --no-rdoc"

RUN chown -R node:node /home/node/xxx.com

USER node

WORKDIR /home/node/xxx.com

ENTRYPOINT ["/bin/bash", "-l", "-c", "./entry.sh"]
entry.sh

service nginx start
npm install
npm run watch &
compass watch
在我的笔记本电脑上(Ubuntu 16.04)开始工作。运行容器(使用
-p8000:80
)一切正常,但在我的工作站(Ubuntu 14.10)上,nginx不会在容器内启动。如果我运行
docker exec-it-u root/bin/bash
,然后运行
service nginx start
一切都在运行

如何在不使用额外命令的情况下做到这一点?为什么它在我的笔记本电脑上工作,而不是在我的工作站上

顺便说一句:

工作站
$docker版本

Client:
  Version:      17.03.1-ce
  API version:  1.27
  Go version:   go1.7.5
  Git commit:   c6d412e
  Built:        Mon Mar 27 17:10:36 2017
  OS/Arch:      linux/amd64

Server:
 Version:      17.03.1-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Mon Mar 27 17:10:36 2017
 OS/Arch:      linux/amd64
 Experimental: false
笔记本电脑:

Client:
 Version:      1.12.6
 API version:  1.24
 Go version:   go1.6.2
 Git commit:   78d1802
 Built:        Tue Jan 31 23:35:14 2017
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.6
 API version:  1.24
 Go version:   go1.6.2
 Git commit:   78d1802
 Built:        Tue Jan 31 23:35:14 2017
 OS/Arch:      linux/amd64

也许您应该将nginx.sh文件复制到容器中,并以shell脚本作为入口点启动容器

  • 将StartScript添加到容器中
  • 移动并设置为可执行
  • 将entrypoint设置为启动SKcript

    来自ubuntu:16.10

    //add start script to temp
    ADD run-nginx.sh  /tmp/
    
    RUN useradd -m --password=node node && \
    apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y curl && \
    apt-get install -y openssl 
    
    && \
      apt-get install -y nginx && \
      apt-get -qy autoremove
    
    COPY . /home/node/xxx.com
    
    RUN rm /etc/nginx/sites-enabled/default && \
      cd /etc/nginx/sites-enabled && \
      ln -s /home/node/xxx.com/xxx.nginx.conf default
    
    WORKDIR /home/node
    
    RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \
      apt-get install -y nodejs 
    
    RUN curl -L https://get.rvm.io | bash -s stable && \
      /bin/bash -l -c "rvm requirements" && \
      /bin/bash -l -c "rvm install 2.0" && \
      /bin/bash -l -c "gem update --system" && \
      /bin/bash -l -c "gem install bundler --no-ri --no-rdoc" && \
      /bin/bash -l -c "gem install compass  --no-ri --no-rdoc" && \
      /bin/bash -l -c "gem install bootstrap -v 4.0.0.alpha6 --no-ri --no-rdoc"
    
    //copy to home and set to executable
    RUN mv /tmp/run-nginx.sh / && chmod +x /run-nginx.sh
    
    RUN chown -R node:node /home/node/xxx.com
    
    USER node
    
    WORKDIR /home/node/xxx.com
    
    ENTRYPOINT ["/run-nginx.sh"]
    

  • 也许您应该将nginx.sh文件复制到容器中,并以shell脚本作为入口点启动容器

  • 将StartScript添加到容器中
  • 移动并设置为可执行
  • 将entrypoint设置为启动SKcript

    来自ubuntu:16.10

    //add start script to temp
    ADD run-nginx.sh  /tmp/
    
    RUN useradd -m --password=node node && \
    apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y curl && \
    apt-get install -y openssl 
    
    && \
      apt-get install -y nginx && \
      apt-get -qy autoremove
    
    COPY . /home/node/xxx.com
    
    RUN rm /etc/nginx/sites-enabled/default && \
      cd /etc/nginx/sites-enabled && \
      ln -s /home/node/xxx.com/xxx.nginx.conf default
    
    WORKDIR /home/node
    
    RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \
      apt-get install -y nodejs 
    
    RUN curl -L https://get.rvm.io | bash -s stable && \
      /bin/bash -l -c "rvm requirements" && \
      /bin/bash -l -c "rvm install 2.0" && \
      /bin/bash -l -c "gem update --system" && \
      /bin/bash -l -c "gem install bundler --no-ri --no-rdoc" && \
      /bin/bash -l -c "gem install compass  --no-ri --no-rdoc" && \
      /bin/bash -l -c "gem install bootstrap -v 4.0.0.alpha6 --no-ri --no-rdoc"
    
    //copy to home and set to executable
    RUN mv /tmp/run-nginx.sh / && chmod +x /run-nginx.sh
    
    RUN chown -R node:node /home/node/xxx.com
    
    USER node
    
    WORKDIR /home/node/xxx.com
    
    ENTRYPOINT ["/run-nginx.sh"]
    

  • 复制/home/node/xxx.com
    包含开始脚本,所以它已经在那里了好吧,我不知道你的目录结构。您是否尝试设置scirpt的完整入口点路径?入口点[“/bin/bash”、“-l”、“-c”、“/home/node/xxx.com/entry.sh”]很好。脚本正在运行并执行它应该执行的操作。这不是问题所在。我的问题是,nginx不是在我的工作站上启动的,而是在我的笔记本电脑上启动的。所以我想这要么是权限问题,要么是因为docker版本不同/home/node/xxx.com包含开始脚本,所以它已经在那里了好吧,我不知道你的目录结构。您是否尝试设置scirpt的完整入口点路径?入口点[“/bin/bash”、“-l”、“-c”、“/home/node/xxx.com/entry.sh”]很好。脚本正在运行并执行它应该执行的操作。这不是问题所在。我的问题是,nginx不是在我的工作站上启动的,而是在我的笔记本电脑上启动的。所以我猜这要么是权限问题,要么是由不同的docker版本引起的。