Ошибка запуска Docker: «Дополнительный аргумент XXX» - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь запустить мой локальный файл настройки / создания докера.

Я получаю следующую ошибку.

docker-compose.exe up
Starting docker_sshd_1 ... done
Attaching to docker_sshd_1
sshd_1  | Extra argument /usr/sbin/sshd.
docker_sshd_1 exited with code 1

Когда я просматриваю логи

docker logs 76d6c9682749
Extra argument /usr/sbin/sshd.

Когда я пытаюсь запустить или запустить его

docker start -ai 76d6c9682749
Extra argument /usr/sbin/sshd.

Docker ps-a показывает

docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                      PORTS               NAMES
76d6c9682749        ansible-test:latest   "/usr/sbin/sshd -D -…"   17 seconds ago      Exited (1) 15 seconds ago                       docker_sshd_1

docker-compose up --build

docker-compose.exe up --build
Building sshd
Step 1/6 : FROM ubuntu:18.04
---> 1d9c17228a9e
Step 2/6 : RUN apt-get update && apt-get install -y                         net-tools                         netcat                         openssh-server                         curl
---> Using cache
---> a1c69db6f87d
Step 3/6 : RUN mkdir /var/run/sshd &&     echo 'root:ansibletest' | chpasswd &&     echo '\n#allow root\nPermitRootLogin yes\n' >> /etc/ssh/sshd_config
---> Using cache
---> 8af61a1ff284
Step 4/6 : EXPOSE 22
---> Using cache
---> 7483e7b442b4
Step 5/6 : CMD ["/usr/sbin/sshd", "-D" ]
---> Using cache
---> 67634af48cd9
Step 6/6 : ENTRYPOINT ["/usr/sbin/sshd", "-D", "-d"]
---> Running in 304247678be0
Removing intermediate container 304247678be0
---> e8c85c2deea0
Successfully built e8c85c2deea0
Successfully tagged ansible-test:latest
Recreating docker_sshd_1 ... done
Attaching to docker_sshd_1
sshd_1  | Extra argument /usr/sbin/sshd.
docker_sshd_1 exited with code 1

Docker inspect показывает следующее для пути и аргументов

λ docker inspect --format='{{.Path}}' e8c85c2deea0
'/usr/sbin/sshd'

λ docker inspect --format='{{.Args}}' e8c85c2deea0
'[-D /usr/sbin/sshd -D]'

мой файл docker compose выглядит так

version: '3'
services:
  sshd:
    build: .
    image: ansible-test:latest
    ports:
    - "2022:22" # bines local port 2022 to container port 22 / sshd
    - "8080:80" # binds local port 8080 to container port 80 / httpd

Мой файл Docker выглядит так

# borrowed https://docs.docker.com/engine/examples/running_ssh_service/
FROM ubuntu:18.04

# some useful debuging tools to troubleshoot on these containers
RUN apt-get update && apt-get install -y \
                        net-tools \
                        netcat \
                        openssh-server \
                        curl

# configure sshd to work as we need it in 18.04
# sets the rootpassword to ansibletest
RUN mkdir /var/run/sshd && \
    echo 'root:ansibletest' | chpasswd && \
    echo '\n#allow root\nPermitRootLogin yes\n' >> /etc/ssh/sshd_config

EXPOSE 22

ENTRYPOINT ["/usr/sbin/sshd", "-D" ]
#ENTRYPOINT ["/usr/sbin/sshd", "-D", "-d"]
# for production system remove "-d"
#  -D      When this option is specified, sshd will not detach and does not become a daemon.
#          This allows easy monitoring of sshd.
#  -d      Debug mode.  The server sends verbose debug output to standard error, and does not put itself in the background.
#          The server also will not fork and will only process one connection.
#          This option is only intended for debugging for the server.
#          Multiple -d options increase the debugging level.  Maximum is 3.

# by default start sshd as background daemon
CMD ["/usr/sbin/sshd", "-D" ]
# used for debugging lets you pass options to sshd on startup
#CMD ["/usr/sbin/sshd", "-D", '-d']

1 Ответ

0 голосов
/ 23 января 2019

В значительном количестве проб и ошибок.

Приведенный выше просмотр докера дает наиболее четкий ответ о том, что на самом деле происходит.

Правильно сказано, что есть дополнительные аргументы

λ docker inspect --format='{{.Path}}' 1be69f7e6140
'/usr/sbin/sshd'

λ docker inspect --format='{{.Args}}' 1be69f7e6140
'[-D /usr/sbin/sshd -D]'

, которые он пытается выполнитьпуть и аргументы как '/usr/sbin/sshd' '[-D /usr/sbin/sshd -D]

Я хочу, чтобы это выглядело так.

λ docker inspect --format='{{.Path}}' cced1543f71e
'/usr/sbin/sshd'

λ docker inspect --format='{{.Args}}' cced1543f71e
'[-D]'

, который будет исполняться как '/usr/sbin/sshd' '[-D]'

По сути, я неправильно понимаю, как ENTRYPOINT и CMD работают вместе.

Из документовдля CMD

Инструкция CMD имеет три формы:

CMD ["executable","param1","param2"] (форма exec, это предпочтительная форма)
CMD ["param1","param2"] (какпараметры по умолчанию для ENTRYPOINT)

Мне нужно использовать вторую форму для этого, чтобы работать правильно.

Если я использую ENTRYPOINT и CMD в одном файле Docker.Я не могу поставить executable в качестве параметра в разделе CMD.Это должны быть просто аргументы, которые я хочу передать точке входа.

Поэтому я отправил по умолчанию для запуска докера использование exec из ENTRYPOINT и параметров из CMD, но я могу переопределить его непосредственно из командной строки.Как docker run image-name arg1 agr2

Мое исправление

ENTRYPOINT ["/usr/sbin/sshd"]
CMD ["-D" ]

Эта ссылка помогла мне понять

https://medium.com/@oprearocks/how-to-properly-override-the-entrypoint-using-docker-run-2e081e5feb9d

...