Контейнер Docker всегда в состоянии выхода - PullRequest
2 голосов
/ 27 сентября 2019

Я создаю виртуальную среду в докере для университетского проекта.У меня есть несколько изображений, которые я создаю.Один из них должен пропинговать другой контейнер докера.Проблема в том, что он всегда находится в состоянии выхода.Как я могу сделать, чтобы не завершить мой док-контейнер?Вот мой Dockerfile:

FROM alpine:latest
#RUN apk add tcpdump
COPY . .
#CMD ["tcpdump" ,"-i" , "eth0" , "'icmp[icmptype] != icmp-echo'" ,"-w"," icmp_reply"]
CMD ["ping" , "172.19.1.3", ">", "ping.pcap"]

Вот это часть моего docker-compose:

 ping_client:
  build: "../ClientPing_Amplification_Attack"
  image: "ping_client:latest"
  container_name: ping_client
  networks:
   rete_ping:   
    ipv4_address: 172.19.3.2

Вот что я делаю в моем сценарии:

docker-compose run -d ping_client

Есть ли у вас какие-либо предложения не выходить из моего док-контейнера?Я думаю, что моя точка входа должна быть пингом.Почему это заканчивается?

Ответы [ 4 ]

2 голосов
/ 27 сентября 2019

заменить CMD ["ping" , "172.19.1.3", ">", "ping.pcap"] с ENTRYPOINT ping 172.19.1.3 > ping.pcap

FROM alpine:latest
#RUN apk add tcpdump
COPY . .
#CMD ["tcpdump" ,"-i" , "eth0" , "'icmp[icmptype] != icmp-echo'" ,"-w"," icmp_reply"]
ENTRYPOINT ping 172.19.1.3 > ping.pcap
1 голос
/ 27 сентября 2019

CMD находится в форме exec, что означает, что он выполняется вне оболочки.> является оператором оболочки и не распознается как допустимая опция ping.Используйте форму оболочки, чтобы заставить ее работать:

CMD ping 172.19.1.3 > ping.pcap

Разница между CMD на основе массива и строки

1 голос
/ 27 сентября 2019

Я в основном пытался воссоздать ваш сценарий с удаленной версией вашего кода, и мой ответ - проверить вашу команду CMD, которая в моем случае также завершилась с кодом 1.

ping_client exited with code 1

Я изменил вашКоманда CMD для выполнения bash, и не было проблем с контейнером:

Dockerfile:

FROM alpine:latest

RUN apk add --no-cache bash

CMD [ "bash" ]

Docker-compose.yml:

version: '3'
services:
 ping_client:
  build: .
  image: 'ping_client:latest'
  container_name: ping_client

Тогда docker-compose run --rm ping_client в котором я могу использовать терминал bash-5.0#.

Таким образом, вы, вероятно, неправильно используете ping и вам нужно запустить его вручную внутри контейнера, чтобы увидеть, работает ли он на самом деле так, как вы хотите.

1 голос
/ 27 сентября 2019

Во-первых, покажите журнал экземпляра

root@docker:~# docker logs [instance-id]

Во-вторых, если экземпляр запущен, попробуйте соединиться с этим и запустить пинг вручную

root@docker:~# docker exec -it [instance-id] /bin/bash
...