Docker 容器始终处于退出状态

Docker container always in exited status

我正在 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"]

这是我的 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 容器,你有什么建议吗? 我认为我的入口点应该是 ping。 为什么会终止?

首先,显示实例的日志

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,容器没有问题:

Docker文件:

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,需要在容器内手动 运行 它以查看它是否真的按照您希望的方式工作。

CMD 是 exec 形式,意味着它在 shell 之外执行。 > 是一个 shell 运算符,ping 未将其识别为有效选项。 使用 shell 形式使其工作:

CMD ping 172.19.1.3 > ping.pcap

Difference between an Array and String Based CMD