Назад | Перейти на главную страницу

Запуск sshd в контейнере Docker для ОС Centos 7 при запуске докера с использованием как ENTRYPOINT, так и CMD

Я знаю, что могу запустить sshd с CMD ["/usr/sbin/sshd","-D"] в базовом контейнере Docker CentOS 7 с docker run <debug_container_id> потому что я видел это в другом месте

  1. https://stackoverflow.com/a/25449705/1258525
  2. https://engineering.riotgames.com/news/jenkins-ephemeral-docker-tutorial
  3. https://github.com/CentOS/CentOS-Dockerfiles/blob/master/ssh/centos7/Dockerfile

Я не могу запустить sshd, когда запускаю свой контейнер, и я думаю, что это как-то связано с моей комбинацией ENTRYPOINT и CMD в моем Dockerfile.

Шаги, которые я предпринимаю:

  1. docker run --name="<debug_container_id>" -d <debug_image>
  2. docker exec <debug_container_id> ps aux

Вы можете видеть, что мой ENTRYPOINT, «dotnet TSL.Security.Service.dll» объединяется с «/ usr / sbin / sshd -D» в выводе из docker exec <debug_container_id> ps aux

Моя текущая работа по запуску sshd:

docker exec -d <debug_container_id> bash -c "/usr/sbin/sshd -D"

С моим обходным путем я могу sssh в контейнер.

Таким образом, вы можете комбинировать ENTRYPOINT и CMD, см. Вот хотя автор статьи создает однострочную команду для выполнения с использованием сочетания ENTRYPOINT и CMD. Я пытаюсь выполнить две командные строки.

Я начал понимать, перечитав это статья что совместное использование ENTRYPOINT и CMD используется для создания одной строковой команды, которая будет выполняться там, где docker run пользователь может переопределить CMD аргументы при желании.

Когда я пытаюсь выполнить две команды при запуске контейнера, я попытался изменить свой ENTRYPOINT на следующее и полностью удалить CMD:

ENTRYPOINT ["dotnet", "TSL.Security.Service.dll", "&&", "/usr/sbin/sshd", "-D"]

Это закончилось тем же результатом, sshd не запущен:

По мере дальнейшего исследования я думаю, что пытаюсь запустить два процесса в своем контейнере Docker, и что я не смогу это сделать:Docker несколько точек входа

Вот мой Dockerfile для моего debug_image:

FROM centos:7
MAINTAINER Brian Ogden

#Timezone
ENV TZ=America/Los_Angeles
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN yum update -y && \
         yum clean all

#############################################
# .NET Core SDK
#############################################
RUN yum install -y \
    libunwind \
    libicu

RUN curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=848821
RUN mkdir -p /opt/dotnet && tar zxf dotnet.tar.gz -C /opt/dotnet
RUN ln -s /opt/dotnet/dotnet /usr/local/bin

#speed up dotnet core builds
ENV NUGET_XMLDOC_MODE skip
ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE true
#############################################

#############################################
# Setup Container for SSH
#############################################
WORKDIR /
RUN yum install -y \
    unzip \
    openssh-server \
    curl

RUN mkdir -p /var/run/sshd
RUN echo 'root:password' | chpasswd

# SSH login fix. Otherwise user is kicked off after login
#ref https://engineering.riotgames.com/news/jenkins-ephemeral-docker-tutorial
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

# gen dummy keys, centos doesn't autogen them like ubuntu does
#ref https://engineering.riotgames.com/news/jenkins-ephemeral-docker-tutorial
RUN /usr/bin/ssh-keygen -A 

#to pass environment variables when running a Dockerized SSHD service. 
#SSHD scrubs the environment, therefore ENV variables contained in Dockerfile 
#must be pushed to /etc/profile in order for them to be available.
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
#############################################



#############################################
# .NET Sevrice setup
#############################################
#install CLRDBG, Microsoft's new cross-platform command line debugger used for debugging code running on .NET Core
RUN curl -sSL https://aka.ms/getclrdbgsh | bash /dev/stdin vs2015u2 ~/clrdbg

# Copy our code from the "/src/MyWebApi/bin/Debug/netcoreapp1.1/publish" folder to the "/app" folder in our container
WORKDIR /app
COPY ./src/TSL.Security.Service/bin/Debug/netcoreapp1.1/publish .

ARG ASPNETCORE_ENVIRONMENT
# Expose port 5000 for the Web API traffic
ENV ASPNETCORE_URLS http://+:5000
ENV ASPNETCORE_ENVIRONMENT $ASPNETCORE_ENVIRONMENT 

EXPOSE 5000 22

ENTRYPOINT ["dotnet", "TSL.Security.Service.dll"]

#############################################


#I wish this would start ssh when the container is ran but it doesn't, tried lots to get this to work
CMD ["/usr/sbin/sshd","-D"]