SSH в контейнере Docker вызывает HTTP 404

У меня такой простой 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 не работает.

В чем может быть проблема с этим? Я просто хочу добавить мне нужен этот SSH сервис в контейнере PHP (и работает docker exec в этом случае не вариант)

1 ответ

Решение

Базовое изображение php-fpm заканчивается на

CMD ["php-fpm"]

Твой собственный CMD переопределит это (имеется в виду php .

Одним из обходных путей будет по крайней мере ДОБАВИТЬ и вызвать скрипт-обертку, который бы:

  • вызов php-fpm
  • запуск sshd демон

Но это не будет хорошо работать с сигналами остановки / уничтожения, которые не остановят все. Существуют специальные изображения для управления более чем одним основным процессом.

Marcin Nabiałek подтверждает в комментариях ниже:

Я создал такой файл:

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

и, кажется, работает сейчас без проблем.

Полный ответ от @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"]
Другие вопросы по тегам