php - Docker 容器中的 SSH 导致 HTTP 404

标签 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 不是一个选项)

最佳答案

base image php-fpm结束于

CMD ["php-fpm"]

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

一个解决方法是至少添加并调用包装脚本,该脚本将:

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

但这不能很好地处理停止/终止信号,停止/终止信号不会停止一切。 There are special images用于管理多个主要流程。

OP Marcin Nabiałek确认 in the comments below :

I've created such file:

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

and it seems to be working now without a problem.

关于php - Docker 容器中的 SSH 导致 HTTP 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36964652/

相关文章:

php - 使用 jquery.load() 发送数据

python - 为什么没有纯 Python SSH1(版本 1)客户端实现?

perl - 从脚本中,在远程服务器上运行脚本并获取其输出

docker - Docker:从docker.io提取图像(最新)时出错

php - 查询给我一个 bool 错误

php - 在 PHP 中连接多个数组元素

docker - 构建 docker 镜像时,在 Dockerfile 中复制文件或通过 ssh 克隆

docker - 如何在已经安装了Python 3.4的Docker容器中升级到Python 3.5? (我在 Ubuntu 20.04 上运行 Docker 容器)

php - 无法连接到 docker-compose 中的数据库服务器(php 和 MariaDB)

php - 页面上的密码字段和 SSL 证书