Docker容器始终处于退出状态

Docker容器始终处于退出状态,docker,docker-compose,ping,Docker,Docker Compose,Ping,我正在为一个大学项目在docker中创建一个虚拟环境。 我有几个我正在创建的图像。 其中一个需要ping另一个docker容器。 问题是它始终处于退出状态。 我如何才能不终止docker容器? 这是我的Dockerfile: FROM alpine:latest #RUN apk add tcpdump COPY . . #CMD ["tcpdump" ,"-i" , "eth0" , "'icmp[icmptype] != icmp-echo'" ,"-w"," icmp_reply"] CM

我正在为一个大学项目在docker中创建一个虚拟环境。 我有几个我正在创建的图像。 其中一个需要ping另一个docker容器。 问题是它始终处于退出状态。 我如何才能不终止docker容器? 这是我的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"]
FROM alpine:latest

RUN apk add --no-cache bash

CMD [ "bash" ]
这是我的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
你有什么建议不退出我的docker容器吗? 我想我的切入点应该是平。
它为什么会终止?

首先,显示实例的日志

root@docker:~# docker logs [instance-id]
第二,如果实例启动,请尝试与此连接并手动运行ping

root@docker:~# docker exec -it [instance-id] /bin/bash
ENTRYPOINT ping 172.19.1.3>ping.pcap替换
CMD[“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

基本上,我尝试用代码的精简版本重新创建您的场景,我的答案是检查您的CMD命令,在我的例子中,该命令也以代码1退出

ping_client exited with code 1
我将CMD命令更改为执行bash,容器没有问题:

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"]
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运行--rm ping_client
,在其中我可以使用终端
bash-5.0


因此,您可能误用了ping,需要在容器内手动运行ping,以查看它是否按您希望的方式工作。

CMD
是exec格式,这意味着它是在shell外部执行的。
是一个shell运算符,
ping
无法将其识别为有效选项。 使用shell窗体使其工作:

CMD ping 172.19.1.3 > ping.pcap

您检查过您的容器日志了吗?@Enix我正在尝试连接到我的docker容器。我总是重新启动docker容器。但它总是退出,因此我无法连接到docker容器。您知道原因吗?无需连接到容器,使用
docker compose logs ping_client
检查log@Enix唯一的输出是:“附加到”我在docker compose中使用网络。如果我尝试开始使用exec,则会出现“地址已在使用中”的错误。如果不是“如果开始”,请尝试输入实例的名称。不管怎么说,把这个放在logI的输出上,我认为你是对的。但是我正在尝试做一个测试台,我必须复制这个脚本好几次(至少30次)。手动进入并每次ping(我必须ping始终是相同的静态IP)对我来说非常无聊。您是否知道如何ping主机,使用脚本将.pcap文件从docker中的目录复制到我的主机pc?您仍然可以使用脚本,但在任何情况下都必须检查您是否正确使用ping。如果ping有效,我会尝试手动ping一次,然后以此作为起点。