【问题标题】:SSH in Docker container causes HTTP 404Docker 容器中的 SSH 导致 HTTP 404
【发布时间】:2016-08-26 04:02:13
【问题描述】:

我有这么简单的dockerfile 用于 PHP:

# 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 ssh docker docker-compose sshd


【解决方案1】:

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 

它现在似乎可以正常工作了。

【讨论】:

  • 感谢您的回复。这个包装脚本应该是我运行这两个命令的简单 bash 脚本?
  • 是的,就是这样
  • 我已经创建了这样的文件:#!/bin/sh # Start PHP php-fpm -D # Start SSH /usr/sbin/sshd -D ,它现在似乎可以正常工作了。我不知道不可能在 dockerfile 中运行多个服务
  • 请发表您的评论作为答案并接受它。
  • @WolfgangFahl 不需要:这是基于我的回答,我已将 Marcin 的评论包含在所述答案中以提高知名度。
【解决方案2】:

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

# php-fpm -D 
# /usr/sbin/sshd -D 

# use \n to make the content into multiple lines
RUN printf "php-fpm -D\n/usr/sbin/sshd -D" >> /start.sh

RUN chmod +x /start.sh

CMD ["/start.sh"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-11
    • 2016-09-08
    • 2017-06-22
    • 2018-05-07
    • 2018-06-04
    • 2018-04-17
    • 1970-01-01
    • 2020-05-21
    相关资源
    最近更新 更多