在docker image prune的docker 文档中,可以使用-a标志
删除所有未使用的图像,而不仅仅是悬空图像
然后
删除所有悬空图像.如果指定了-a,还将删除未被任何容器引用的所有图像.
有人可以向我解释悬挂图像是什么,悬空和未使用图像之间有什么区别?
我经常遇到问题,因为我在具有多个节点的docker swarm上部署的服务将无法启动,并且没有生成的日志我可以查看 docker service logs {serviceName}
服务无法启动有很多可能的原因,例如
我很难找到容器无法启动的原因.我找到了docker service ps {serviceName}列出一个或多个服务的任务的命令和一个简短的错误消息(如果有错误).但是,当我尝试检查任务时docker service logs {taskId}(应显示任务的日志),我得到了Error response from daemon: task 3lkgo8t2sn7k not found.
任何人都可以帮我收到完整的错误消息,为什么服务无法启动?
我正在使用docker compose在Docker群上部署多个堆栈。
现在,我已经在代理堆栈撰写文件中定义了一个网络:
networks:
proxy:
driver: overlay
Run Code Online (Sandbox Code Playgroud)
其他堆栈通过以下方式引用此网络:
networks:
proxy_proxy:
external: true
Run Code Online (Sandbox Code Playgroud)
此设置的问题在于,所有其他堆栈现在都依赖于代理堆栈。删除代理堆栈(例如为了替换/重新启动它)将导致如下错误:
无法删除网络800w54tbh7w7clc4o8uc3y7no:来自守护程序的错误响应:rpc错误:代码= 9 desc =服务正在使用网络800w54tbh7w7clc4o8uc3y7no 0zu489jepz586sguqrorv6j6h无法从堆栈中删除某些资源:代理
有没有一种方法可以在docker compose中定义一个不是由一个堆栈“拥有”的网络,以便如果已经存在,则任何新部署的堆栈都将加入该网络,如果不存在,则将创建一个网络?
这样,堆栈之间就不会有依赖性。
每次提交我的git repo都会触发我的Jenkins管道的构建.
我想通过提交哈希检索旧构建的buildNumber.我怎样才能做到这一点?
我知道这些信息存在是因为我可以在UI中找到它.
关于为什么我想要这个的一些背景:当有人标记提交时我想创建一个版本(通过标记docker图像).每个构建都将推送包含构建号的图像.所以我想找出哪个构建号对应于该提交,以便我可以找到我想要发布的图像.
我在 docker 中有以下设置:
应用程序的 logdriver 的配置描述了 fluentd 容器。日志将保存在 ES 中并显示在 Kibana 中。
当 logdriver 配置为这样时,它可以工作:
web:
image: httpd
container_name: httpd
ports:
- "80:80"
links:
- fluentd
logging:
driver: "fluentd"
options:
fluentd-address: localhost:24224
tag: httpd.access
Run Code Online (Sandbox Code Playgroud)
fluentd 将其暴露的端口 24224 映射到主机的端口 24224 上。
fluentd:
build: ./fluentd
image: fluentd
container_name: fluentd
links:
- "elasticsearch"
ports:
- "24224:24224"
Run Code Online (Sandbox Code Playgroud)
但我不想在主机网络上暴露我的流利。我想让它在 docker 网络中保持“私有”(我只想在主机网络上映射应用程序和 kibana),如下所示:
fluentd:
build: ./fluentd
image: fluentd
container_name: fluentd
links:
- "elasticsearch"
Run Code Online (Sandbox Code Playgroud)
端口 24224 仍然公开(在 dockerfile 中),但它没有映射到主机网络上。现在我想更改我的应用程序的日志驱动程序的配置: logging: driver: "fluentd" …
所以我试图从我的 docker 集群获取特定的端口号,这样做是因为我稍后需要该端口。
当我执行 docker-compose ps 时,我得到以下输出
contaimer_db_1 docker-entrypoint.sh mysqld Up 3306/tcp
container_node_1 /usr/bin/supervisord -n Up 0.0.0.0:3902->3902/tcp
container_php_1 docker-php-entrypoint php-fpm Up 9000/tcp
container_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp
Run Code Online (Sandbox Code Playgroud)
我想得到的是来自container_node_1 3902的端口号
到目前为止我得到了
docker-compose ps | grep "[ :]\?[[:digit:]]\{4\}"
Run Code Online (Sandbox Code Playgroud)
但这将获取所有端口,因为它们连续有 4 个数字。我如何更改它以确保它只获取节点端口?
如果有任何帮助,节点容器将始终显示为 0.0.0.0:1234->1234
我需要将动态env变量传递给kubectl create。像这样
kubectl create -f app.yaml --Target=prod
基于目标的代码部署在不同的服务器上。