小编her*_*erm的帖子

Docker:什么是悬空图像,什么是未使用的图像?

docker image prune的docker 文档中,可以使用-a标志

删除所有未使用的图像,而不仅仅是悬空图像

然后

删除所有悬空图像.如果指定了-a,还将删除未被任何容器引用的所有图像.

有人可以向我解释悬挂图像是什么,悬空和未使用图像之间有什么区别?

docker

120
推荐指数
5
解决办法
4万
查看次数

docker swarm如何找出服务无法启动的原因

我经常遇到问题,因为我在具有多个节点的docker swarm上部署的服务将无法启动,并且没有生成的日志我可以查看 docker service logs {serviceName}

服务无法启动有很多可能的原因,例如

  • 无法从注册表下载图像
  • 无法实现的约束

我很难找到容器无法启动的原因.我找到了docker service ps {serviceName}列出一个或多个服务的任务的命令和一个简短的错误消息(如果有错误).但是,当我尝试检查任务时docker service logs {taskId}(应显示任务的日志),我得到了Error response from daemon: task 3lkgo8t2sn7k not found.

任何人都可以帮我收到完整的错误消息,为什么服务无法启动?

docker-swarm

37
推荐指数
1
解决办法
2万
查看次数

docker swarm:无需外部即可在堆栈之间共享网络

我正在使用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中定义一个不是由一个堆栈“拥有”的网络,以便如果已经存在,则任何新部署的堆栈都将加入该网络,如果不存在,则将创建一个网络?

这样,堆栈之间就不会有依赖性。

docker-compose docker-swarm

7
推荐指数
1
解决办法
2271
查看次数

Jenkins:找到git commit的内部版本号

每次提交我的git repo都会触发我的Jenkins管道的构建.

我想通过提交哈希检索旧构建的buildNumber.我怎样才能做到这一点?

我知道这些信息存在是因为我可以在UI中找到它.


关于为什么我想要这个的一些背景:当有人标记提交时我想创建一个版本(通过标记docker图像).每个构建都将推送包含构建号的图像.所以我想找出哪个构建号对应于该提交,以便我可以找到我想要发布的图像.

jenkins jenkins-pipeline

7
推荐指数
1
解决办法
5664
查看次数

无法在撰写中使用服务名称从(fluentd)日志驱动程序登录

我在 docker 中有以下设置:

  • 应用程序 (httpd)
  • 流利的
  • 弹性搜索
  • 基巴纳

应用程序的 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" …

fluentd docker docker-networking efk

5
推荐指数
1
解决办法
2162
查看次数

bash正则表达式获取docker容器端口号

所以我试图从我的 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

bash docker

4
推荐指数
1
解决办法
1808
查看次数

Kubernates将env变量传递给“ kubectl create”

我需要将动态env变量传递给kubectl create。像这样

kubectl create -f app.yaml --Target=prod

基于目标的代码部署在不同的服务器上。

kubernetes google-kubernetes-engine kubectl

3
推荐指数
1
解决办法
2868
查看次数