Docker容器中的SSH导致HTTP 404

时间:2016-05-01 08:29:23

标签: php ssh docker docker-compose sshd

我对PHP有这么简单的dockerfile

# 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工作正常但我在显示页面时获得404。当我评论这一行时,我没有问题,但显然这个SSH无效。

这可能是什么问题?我只是想在PHP容器中添加我需要这个SSH服务(在这种情况下运行docker exec不是一个选项)

2 个答案:

答案 0 :(得分:2)

base image php-fpm

结尾
CMD ["php-fpm"]

你自己的CMD会覆盖它(意思是php。

一种解决方法至少是ADD并调用一个包装脚本:

  • 致电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 
  

现在似乎没有问题。

答案 1 :(得分:1)

@VonC和@Marcin Nabialek的完整答案。

width