在Docker容器中的SSH会导致HTTP 404

我有这样简单的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不是一个选项)

基本图像php-fpm结束

 CMD ["php-fpm"] 

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

一个解决方法是至less要添加并调用一个包装脚本将会:

  • 调用php-fpm
  • 启动sshd守护进程

但是,这不会阻止/终止信号,这不会阻止一切。 有特殊的图像pipe理多个主要过程。

OP MarcinNabiałek 在下面的评论中证实:

我已经创build了这样的文件:

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

而且现在似乎正在工作,没有问题。