我有以下独立的docker-compose.yml文件:
version: "3"
services:
feed_activator:
container_name: feed_activator
image: docker
volumes: [ "/var/run/docker.sock:/var/run/docker.sock" ]
command: [ "/bin/sh", "-c", "apk --no-cache add curl", "while true; do sleep 60; curl 'https://google.com'; done" ]
restart: "always"我期望它所做的就是简单地安装curl并每分钟向https://google.com发送一个GET请求。
取而代之的是
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
(1/4) Installing brotli-libs (1.0.9-r3)
(2/4) Installing nghttp2-libs (1.42.0-r1)
(3/4) Installing libcurl (7.78.0-r0)
(4/4) Installing curl (7.78.0-r0)
Executing busybox-1.32.1-r6.trigger
OK: 13 MiB in 24 packages
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
OK: 13 MiB in 24 packages
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
OK: 13 MiB in 24 packages其中
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
OK: 13 MiB in 24 packages部分在无休止地重复,容器处于重新启动状态。我必须做些什么才能让它正常工作?任何提示都将不胜感激。
发布于 2021-08-11 10:39:51
我不会尝试像这样写一个“独立的”合成文件。每次重新启动该进程时,它都需要重新安装阿尔卑斯包依赖项;这既慢又浪费,而且只能扩展到微不足道的示例。这种编写复杂command:的设置也很棘手。
我要做的第一件事是编写一个普通的shell脚本,它可以做你想做的事情:
#!/bin/sh
# curl-periodically.sh
while true
do
sleep 60
curl 'https://google.com'
done您可以在Docker之外的本地运行它,以确保它能执行您想要的操作。
chmod +x curl-periodically.sh
./curl-periodicially.sh然后,您可以编写Dockerfile来将您的程序转换为可运行的Docker映像。这个文件应该被准确地命名为Dockerfile。
FROM alpine
# Set up OS-level dependencies
RUN apk --no-cache add curl
# Copy the application in
WORKDIR /app
COPY curl-periodically.sh .
# Explain what to do when a container starts
CMD ["./curl-periodically.sh"]现在,您的Compose设置只需要解释需要构建此映像。您不需要编写复杂的sh -c命令或绑定挂载任何内容。
version: '3.8'
services:
feed_activator:
build: .
restart: always(避免绑定-将Docker套接字挂载到容器中,使用Docker Hub docker镜像,或者尝试从其他容器操作容器:您可以通过这种方式简单地将整个主机作为根,这会使您的应用程序不必要地绑定到Docker。一些依赖于docker命令的东西甚至不能在其他容器系统中运行,比如Kubernetes。这个示例似乎根本不需要它,我也没有把它包括在内。)
发布于 2021-08-11 08:46:56
解决方案是在一个命令中运行所有命令,如下所示
command: [ "/bin/sh", "-c", "apk --no-cache add curl; while true; do sleep 60; curl 'https://google.com'; done" ]请注意...url", "while...与...url; while...的区别
https://stackoverflow.com/questions/68738391
复制相似问题