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 в этом случае не вариант)

3

Решение

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

CMD ["php-fpm"]

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

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

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

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

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

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

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

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]