Я знаю, что могу запустить sshd с CMD ["/usr/sbin/sshd","-D"]
в базовом контейнере Docker CentOS 7 с docker run <debug_container_id>
потому что я видел это в другом месте
Я не могу запустить sshd, когда запускаю свой контейнер, и я думаю, что это как-то связано с моей комбинацией ENTRYPOINT
и CMD
в моем Dockerfile.
Шаги, которые я предпринимаю:
docker run --name="<debug_container_id>" -d <debug_image>
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"]