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