Investigamos por todo el mundo online para así mostrarte la solución a tu duda, en caso de alguna difcultad déjanos la pregunta y te contestamos sin falta, porque estamos para ayudarte.
Solución:
Sólo inténtalo:
ENTRYPOINT service ssh restart && bash
en su dockerfile, ¡funciona divertido para mí!
más detalles aquí: ¿Cómo iniciar automáticamente un servicio cuando se ejecuta un contenedor docker?
Aquí hay un Dockerfile
que instala el servidor ssh y lo ejecuta:
# Build Ubuntu image with base functionality.
FROM ubuntu:focal AS ubuntu-base
ENV DEBIAN_FRONTEND noninteractive
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# Setup the default user.
RUN useradd -rm -d /home/ubuntu -s /bin/bash -g root -G sudo ubuntu
RUN echo 'ubuntu:ubuntu' | chpasswd
USER ubuntu
WORKDIR /home/ubuntu
# Build image with Python and SSHD.
FROM ubuntu-base AS ubuntu-with-sshd
USER root
# Install required tools.
RUN apt-get -qq update
&& apt-get -qq --no-install-recommends install vim-tiny=2:8.1.*
&& apt-get -qq --no-install-recommends install sudo=1.8.*
&& apt-get -qq --no-install-recommends install python3-pip=20.0.*
&& apt-get -qq --no-install-recommends install openssh-server=1:8.*
&& apt-get -qq clean
&& rm -rf /var/lib/apt/lists/*
# Configure SSHD.
# SSH login fix. Otherwise user is kicked off after login
RUN sed '[email protected]s*requireds*[email protected] optional [email protected]' -i /etc/pam.d/sshd
RUN mkdir /var/run/sshd
RUN bash -c 'install -m755 <(printf "#!/bin/shnexit 0") /usr/sbin/policy-rc.d'
RUN ex +'%s/^#zeListenAddress/1/g' -scwq /etc/ssh/sshd_config
RUN ex +'%s/^#zeHostKey .*ssh_host_.*_key/1/g' -scwq /etc/ssh/sshd_config
RUN RUNLEVEL=1 dpkg-reconfigure openssh-server
RUN ssh-keygen -A -v
RUN update-rc.d ssh defaults
# Configure sudo.
RUN ex +"%s/^%sudo.*$/%sudo ALL=(ALL:ALL) NOPASSWD:ALL/g" -scwq! /etc/sudoers
# Generate and configure user keys.
USER ubuntu
RUN ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
#COPY --chown=ubuntu:root "./files/authorized_keys" /home/ubuntu/.ssh/authorized_keys
# Setup default command and/or parameters.
EXPOSE 22
CMD ["/usr/bin/sudo", "/usr/sbin/sshd", "-D", "-o", "ListenAddress=0.0.0.0"]
Compile con el siguiente comando:
docker build --target ubuntu-with-sshd -t ubuntu-with-sshd .
Luego ejecuta con:
docker run -p 2222:22 ubuntu-with-sshd
Para conectarse al contenedor a través del puerto local, ejecute: ssh -v localhost -p 2222
.
Para verificar la dirección IP del contenedor, use docker ps
y docker inspect
.
Aquí hay un ejemplo de docker-compose.yml
expediente:
---
version: '3.4'
services:
ubuntu-with-sshd:
image: "ubuntu-with-sshd:latest"
build:
context: "."
target: "ubuntu-with-sshd"
networks:
mynet:
ipv4_address: 172.16.128.2
ports:
- "2222:22"
privileged: true # Required for /usr/sbin/init
networks:
mynet:
ipam:
config:
- subnet: 172.16.128.0/24
Para ejecutar, escriba:
docker-compose up --build
Esta es una pregunta bastante antigua, pero para que otros la encuentren, creo que la forma correcta de hacerlo sería seguir las instrucciones de docker para acoplar el servicio ssh.
Y en correlación con la pregunta específica, las siguientes líneas agregadas al final del archivo acoplable lograrán lo que estaba buscando:
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
Dockerizar un servicio SSHD