我正在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。 为什么终止?
答案 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