Docker容器始终处于退出状态

时间:2019-09-27 12:35:02

标签: docker docker-compose ping

我正在docker中为大学项目创建虚拟环境。 我有几个正在创建的图像。 其中之一需要对另一个Docker容器执行ping操作。 问题在于它始终处于退出状态。 我该怎么做才能不终止我的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。 为什么终止?

4 个答案:

答案 0 :(得分:2)

替换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 :(得分:1)

首先,显示实例的日志

RuntimeAdapterFactory

第二,如果实例启动,尝试与此连接并手动运行ping

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

答案 2 :(得分:1)

我基本上是尝试使用剥离的代码版本来重新创建您的方案,我的答案是检查您的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,因此需要在容器内手动运行它,以查看它是否真正按照您的意愿工作。

答案 3 :(得分:1)

CMD的格式为exec,表示它在shell外部执行。 >是外壳程序运算符,ping无法将其识别为有效选项。 使用外壳窗体使其工作:

CMD ping 172.19.1.3 > ping.pcap

Difference between an Array and String Based CMD