2016-05-01 74 views
3

我有这样的简单dockerfile为PHP:SSH在泊坞容器导致HTTP 404

# Base image 
FROM php:7-fpm 

# Update packages list 
RUN apt-get --yes update; 

# Install SSH server, set root password and allow root login 
RUN apt-get --yes install openssh-server 
RUN mkdir /var/run/sshd 
RUN echo 'root:123' | chpasswd 
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config 

# Run SSH server 
EXPOSE 22 
CMD ["/usr/sbin/sshd", "-D"] 

而这样docker-compose.yml文件

web: 
    image: nginx:latest 
    volumes: 
    - /c/Users/marcin/dock-test/composers/l1.app/html/:/usr/share/nginx/html/ 
    - /c/Users/marcin/dock-test/composers/l1.app/nginx/conf.d/:/etc/nginx/conf.d/ 
    - /c/Users/marcin/dock-test/composers/l1.app/nginx/log/:/var/log/nginx/ 
    ports: 
    - "8080:80" 
    working_dir: /usr/share/nginx/html/ 
    links: 
    - php 
    - db 
    container_name: l1.web 
    environment: 
    - VIRTUAL_HOST=l1.app 
php: 
    build: ../builds 
    dockerfile: Dockerfile-php7-fpm 
    volumes: 
    - /c/Users/marcin/dock-test/composers/l1.app/html/:/usr/share/nginx/html/ 
    - /c/Users/marcin/dock-test/composers/l1.app/php/config/:/usr/local/etc/php/ 
    working_dir: /usr/share/nginx/html/ 
    links: 
    - db 
    container_name: l1.php 
    ports: 
    - "22020:22" 
db: 
    image: mysql:5.7 
    environment: 
    - MYSQL_ROOT_PASSWORD=pass 
    - MYSQL_DATABASE= 
    - MYSQL_USER= 
    - MYSQL_PASSWORD= 
    expose: 
    - 3306 
    volumes: 
    - /c/Users/marcin/dock-test/composers/l1.app/mysql/data/:/var/lib/mysql/ 
    - /c/Users/marcin/dock-test/composers/l1.app/mysql/conf.d/:/etc/mysql/conf.d/ 
    - /c/Users/marcin/dock-test/composers/l1.app/mysql/log/:/var/log/mysql/ 
    ports: 
    - "33060:3306" 
    container_name: l1.db 

问题 - 一切正常,直到我在dockerfile添加最后显示的行:

CMD ["/usr/sbin/sshd", "-D"] 

如果我添加此行,SSH工作正常,但我是GE显示页面时显示404。当我评论这一行时,我得到的页面没有问题,但显然这个SSH不起作用。

这可能是什么问题?我只想补充,我需要在PHP集装箱此SSH服务(在这种情况下运行docker exec不是一个选项)

+0

似乎是一个服务器管理员问题给我,而不是编程 – Alnitak

回答

2

base image php-fpm

CMD ["php-fpm"] 

结束时,您自己CMD会重写(意思是PHP。

一个解决办法是至少要添加和调用的包装脚本,这会:

  • 通话php-fpm
  • 推出sshd守护

但不会与停止/终止信号,这将不会停止一切发挥好。 There are special images用于管理多个主流程。

OP Marcin Nabiałek确认in the comments below

我创造了这样的文件:

#!/bin/sh 
# Start PHP 
php-fpm -D 
# Start SSH 
/usr/sbin/sshd -D 

,它似乎没有问题,现在的工作。

+0

谢谢你的答复。这个包装脚本应该是简单的bash脚本,我运行这两个命令? –

+0

是的,这是我创造了这样的文件的想法 – VonC

+1

:'#/ bin/sh的 #开始PHP PHP-FPM-D #启动SSH /usr/sbin目录/ sshd的-D '和它似乎现在工作没有问题。我不知道无法在dockerfile –