鉴于:
apt-get install ssh
)问题:每次启动容器时我都必须手动运行sshd service ssh start
试过:update-rc.d ssh defaults
但它没有帮助.
问题:如何设置容器以在容器启动期间自动启动sshd服务?
Jia*_*Jia 16
试一试:
ENTRYPOINT service ssh restart && bash
Run Code Online (Sandbox Code Playgroud)
在您的dockerfile中,它对我来说很有趣!
更多详细信息:如何在运行docker容器时自动启动服务?
Pix*_*xel 13
我认为正确的方法是按照 docker 的说明来 dockerizing ssh 服务。
与具体问题相关,在 dockerfile 末尾添加的以下几行将实现您所寻找的内容:
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
Run Code Online (Sandbox Code Playgroud)
这是一个Dockerfile
安装 ssh 服务器并运行它的程序:
# 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 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
RUN mkdir /var/run/sshd
RUN bash -c 'install -m755 <(printf "#!/bin/sh\nexit 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"]
Run Code Online (Sandbox Code Playgroud)
使用以下命令构建:
docker build --target ubuntu-with-sshd -t ubuntu-with-sshd .
Run Code Online (Sandbox Code Playgroud)
然后运行:
docker run -p 2222:22 ubuntu-with-sshd
Run Code Online (Sandbox Code Playgroud)
要通过本地端口连接到容器,运行:ssh -v localhost -p 2222
。
要检查容器 IP 地址,请使用docker ps
和docker inspect
。
以下是docker-compose.yml
文件示例:
---
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
Run Code Online (Sandbox Code Playgroud)
要运行,请键入:
docker-compose up --build
Run Code Online (Sandbox Code Playgroud)
我创建了 dockerfiler 来在里面运行 ssh。我认为它不安全,但对于 DMZ 中的测试/开发来说可能没问题:
FROM ubuntu:20.04
USER root
# change root password to `ubuntu`
RUN echo 'root:ubuntu' | chpasswd
ENV DEBIAN_FRONTEND noninteractive
# install ssh server
RUN apt-get update && apt-get install -y \
openssh-server sudo \
&& rm -rf /var/lib/apt/lists/*
# workdir for ssh
RUN mkdir -p /run/sshd
# generate server keys
RUN ssh-keygen -A
# allow root to login
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
EXPOSE 22
# run ssh server
CMD ["/usr/sbin/sshd", "-D", "-o", "ListenAddress=0.0.0.0"]
Run Code Online (Sandbox Code Playgroud)
Mag*_*res -18
您可以尝试使用 phusion/baseimage-docker 更优雅的方式来做到这一点
https://github.com/phusion/baseimage-docker#readme
归档时间: |
|
查看次数: |
44045 次 |
最近记录: |