标签: docker-engine

如何在jenkins管道作业中运行docker命令

在我的Manage Jenkins>中Global Tool Configuration,我已经配置了一个名为"docker"的工具,如下所示:

name:                   docker
install automatically:  CHECKED
docker version:         latest
Run Code Online (Sandbox Code Playgroud)

然后我所拥有的jenkinsfile就是以下内容,而不是其他内容:

node {
    DOCKER_HOME = tool "docker"
    sh """
        echo $DOCKER_HOME
        ls $DOCKER_HOME/bin/
        $DOCKER_HOME/bin/docker images
        $DOCKER_HOME/bin/docker ps -a
    """
}
Run Code Online (Sandbox Code Playgroud)

我收到这样的错误" 无法连接到Docker守护程序.这个主机上是否运行了docker守护程序? ".

以下是完整的console log:

Started by user Syed Rakib Al Hasan
[Pipeline] node
Running on master in /var/jenkins_home/workspace/helloDocker
[Pipeline] {
[Pipeline] tool
[Pipeline] sh
[helloDocker] Running shell script
+ echo /var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/docker
/var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/docker
+ ls /var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/docker/bin/
docker
+ /var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/docker/bin/docker images …
Run Code Online (Sandbox Code Playgroud)

jenkins docker docker-engine

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

如何使Docker容器与未经Docker化的应用程序对话?

我遇到的一种情况是Docker容器必须与未经过docker化的应用程序以及其他主机中的docker容器进行通信。

假设有三个服务器A,B和C。服务器A有两个运行JBoss App Server容器的docker容器。服务器B(非docker主机)具有MySQL DB。服务器C具有另一组容器。

我希望JBoss应用程序服务器容器与驻留在另一台主机中的MySQL DB连接,并从DB中提取信息。JBoss还必须讨论服务器C中的容器。

如何做到这一点?

PS:我是Docker的新手

mysql jboss docker docker-engine

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

为什么根本要为docker swarm集群中的节点选择充当工作者的角色?

假设我们有一个包含10个节点,4个管理人员和6个工作人员的测试设置。

当领导者经理失败时,其他3名经理将选择另一名经理作为领导者。

如果这位领导者也失败了,我们将只剩下2名经理。4名其他经理然后说

来自守护程序的错误响应:rpc错误:代码=未知desc =集群没有领导者。在线上的管理人员可能太少。确保一半以上的经理在线。

由于剩下的管理人员超过一半,因此尽管剩下集群中的2名管理人员,他们将无法选择新的领导者。

我的问题是

  1. 之所以具有这种规则的意义,是因为该集群没有领导者,并且只要没有其他管理器添加到集群中就不再可以管理,尽管有2个管理器可用。
  2. 为什么我应该为所有节点选择角色工作者?将节点作为工作人员有什么优势?默认情况下,管理器还充当工作程序,其缺点是当管理器节点发生故障时它们无法接管。

docker docker-swarm docker-engine docker-swarm-mode

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

使用 Docker 和 Kubernetes 进行日志记录。分割的日志超过 16k

我使用的是 Docker 版本 17.12.1-ce Kubernetes 版本 v1.10.11

我的应用程序将 Json 格式的日志打印到控制台。其中一个字段是stackTrace,它可以包含一个巨大的stackTrace。

问题在于日志消息被分成两条消息。因此,如果我查看 /var/lib/docker/containers/ ... .log,我会看到两条消息。我读到这样做是出于安全原因,但我真的不明白我能用它做什么?

我应该切断我的 stackTrace 吗?或者定制尺寸?这是允许的吗?这是处理这个问题的正确方法吗?

p/s 我正在使用 json 文件日志记录驱动程序

java logging docker kubernetes docker-engine

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

Docker 通过 ssh 连接到远程守护进程 - 权限被拒绝(公钥)

我在连接到远程(DigitalOcean)docker 引擎时遇到问题。我所做的是

  1. 在 Ubuntu 20.04 上使用 Docker 19.03.12 制作了一个 Droplet。
  2. 创建一个新用户 myuser 并添加到远程主机上的 docker 组。
  3. 为新用户创建一个 .ssh/authorized_keys ,并设置权限、所有者等。
  4. 重新启动 ssh 和 docker 服务。

结果

  1. 我可以使用 myuser 从 Mac 笔记本通过 ssh 连接到远程主机。(当我运行 ssh 钥匙串时,会要求输入 id_rsa.key 的密码。)
  2. 通过 ssh 登录远程主机后,我可以毫无问题地运行 docker ps、docker info。

问题

在为远程引擎创建新上下文之前,我尝试从 Mac 笔记本电脑上的本地客户端运行一些 docker 命令。对我来说有趣的部分是下面的命令都不需要 id_rsa 密码)

  1. docker -H ssh://myuser@droplet_ip ps-> 错误
  2. DOCKER_HOST=ssh://myuser@droplet_ip docker ps-> 错误

错误

docker -H ssh://myuser@droplet_ip ps
error during connect: Get http://docker/v1.40/containers/json: command [ssh -l myuser -- droplet_ip docker system dial-stdio] has …
Run Code Online (Sandbox Code Playgroud)

ssh docker docker-engine

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

如何在 Docker 容器中获得一致的执行时间

我正在使用 Docker 来隔离特定进程。该过程在多核虚拟机上重复运行多次。

每个执行时间都通过其挂钟时间来测量并记录。我希望时间差小于 200 毫秒。不幸的是,我发现 Docker 中最佳执行和最差执行之间大约有 1 秒的差异。我不明白为什么。我想将其降低到 < 200 毫秒。

这是一个图表来说明我的问题: 在此输入图像描述

这里,蓝色列代表以毫秒为单位的本机执行时间,这非常一致,而橙色列则显示相同代码作为 Docker 进程运行时的执行时间。

我的目标是在 Docker 中获得一致的执行时间。

这是我的最小可重现示例:

mem.cpp该程序执行内存昂贵的操作需要时间。

#include <bits/stdc++.h>
#include <vector>

using namespace std;
string CustomString(int len)
{
    string result = "";
    for (int i = 0; i<len; i++)
        result = result + 'm';

    return result;
}
int main()
{
   int len = 320;
   std::vector< string > arr;
   for (int i = 0; i < 100000; i++) {
       string s = CustomString(len);
       arr.push_back(s);
   } …
Run Code Online (Sandbox Code Playgroud)

docker docker-engine

5
推荐指数
0
解决办法
204
查看次数

使用 buildroot 发行版作为 docker *主机*

我有一个基于 ARM 的主板,它只能运行制造商提供的基于特定 buildroot 的发行版。我想尝试在这个板上运行 Docker。

每当我在 Google 搜索中结合 buildroot 和 docker 时,我都会得到解释如何使用 buildroot 创建容器的页面,而不是如何更改 buildroot 以将其用作主机。

谁能指点我一些文档吗?

host buildroot docker docker-engine

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

如何在 docker 容器内安装/启动 docker 引擎服务

我正在使用 jenkins 的官方 docker 容器运行 jenkins。我dockerfile按照https://docs.docker.com/engine/installation/linux/debian/ 上的说明进行了以下操作

FROM jenkins:2.32.1

# install docker inside this container
USER root
    # Install Docker inside Jenkins
    RUN apt-get update
    RUN apt-get purge "docker.io*"
    RUN apt-get update
    RUN apt-get install -y apt-transport-https ca-certificates gnupg2
    RUN apt-key adv \
       --keyserver hkp://ha.pool.sks-keyservers.net:80 \
       --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
    RUN echo "deb https://apt.dockerproject.org/repo debian-jessie main" > /etc/apt/sources.list.d/docker.list
    RUN apt-get update
    RUN apt-cache policy docker-engine
    RUN apt-get update
    RUN apt-get install -y docker-engine
    RUN gpasswd -a jenkins docker …
Run Code Online (Sandbox Code Playgroud)

bash containers jenkins docker docker-engine

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

Docker Swarm:来自守护程序的错误响应:验证根CA证书时出错:x509:证书已过期或尚未生效

操作系统:CentOS 7 VM

Docker最新版本

执行的命令:

   1) docker swarm init
   2) docker swarm join --token SWMTKN-1-3iqtmbz55yvhxkahe2ncs7d9ebxzlzmw1pwhqzvmcemiolef63-3muc4qjs3mbvh53t8ktzzmb22 192.168.10.108:2377 
    Error: Error response from daemon: error while validating Root CA Certificate: x509: certificate has expired or is not yet valid
Run Code Online (Sandbox Code Playgroud)

如您所见,群连接给了我这个错误。此错误的原因是什么,它是从哪里来的?

关于Aditya

x509 docker docker-swarm docker-engine

3
推荐指数
2
解决办法
4113
查看次数

设置Docker Container的最长生命周期?

是否有可能启动Docker容器(在CMD中使用某些命令)并确保它不会停留超过指定的时间段?

例如,我有一个Ubuntu容器,我想启动它,执行一些命令并在最后退出(杀死容器).但是这些命令可能包含无限循环或者可能只持续很长时间,所以我想确保Docker容器在指定的时间后自动被杀死.

docker devops docker-engine

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

使用 Docker Engine API 设置容器的 CPU 核心数

我有一个后端服务器程序,它使用 Docker 引擎 API (Json API) 启动 docker 容器,我想将每个 docker 容器的 CPU 核心数量限制为例如 1。

Docker Engine API 文档有几个选项来配置容器的 CPU 设置,请参阅https://docs.docker.com/engine/api/v1.24

"HostConfig": {
     "CpuPercent": 80,
     "CpuShares": 512,
     "CpuPeriod": 100000,
     "CpuQuota": 50000,
     "CpusetCpus": "0,1",
     "CpusetMems": "0,1"
}
Run Code Online (Sandbox Code Playgroud)

我可以使用CpusetCpus它,但这非常麻烦,因为我需要保留将哪些 docker 容器分配给哪些 CPU 核心的列表。(我不关心我的容器运行在哪个 CPU 核心上,我只是想避免它使用超过 1 个 CPU 核心。)

我还可以设置CpuQuota为每个 docker 容器仅使用所有 CPU 核心的 12.5%,这对应于具有 8 个 CPU 核心的服务器上的 1 个 CPU 核心。这种方法的问题在于,如果我在具有不同数量 CPU 核心的不同服务器上运行后端程序,则CpuQuota12.5% 的设置不再对应于 1 个 CPU 核心。

上述两种选择都很麻烦,而且远非理想。一定有更好/更简单的方法来设置每个容器的 CPU 核心数?!

docker docker-engine

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