标签: docker

在 Kubernetes/Docker 中的程序上使用 Perf 的更好方法?

我在 CentOS 7 上运行 Kubernetes,似乎该版本不perf支持命名空间。

如果在主机节点(使用 找到的主机节点kubectl describe pods --namespace)上的 PID 上运行 perf,我会收到有关未找到符号的错误。这似乎是因为它在主机节点的文件系统上查找相对于容器的文件路径。

如果我将 exe(包含符号的 Go exe)复制到主机节点上的预期路径(使用kubectl cp ...,或通过在 中的 override2 下查找文件/var/lib/docker),则perf top -p <pid>可以从主机主机节点工作,因为它可以找到与匹配容器中的exe。

是否有更好/更干净的方法来运行perf在具有 CentOS 7 主机的容器中运行的进程?

参考:

linux docker centos7 kubernetes perf

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

为什么我的 docker 实际上没有记录任何内容?

我有以下 python 文件:

 import time
 from datetime import datetime


 while True:
     time.sleep(1)
     print(datetime.now())
Run Code Online (Sandbox Code Playgroud)

我已将其添加到 Dockerfile 中:

FROM python:3.7


WORKDIR /test
COPY test.py /test/
CMD ["python", "test.py"]
Run Code Online (Sandbox Code Playgroud)

如果我构建这个并运行

sudo docker run -it --name test myimage
Run Code Online (Sandbox Code Playgroud)

一切都很棒。大约每秒打印一次当前时间。

另一方面,如果我运行它:

sudo docker run -d --name test myimage
Run Code Online (Sandbox Code Playgroud)

它会跑到后台,但如果我这样做......

sudo docker logs test
Run Code Online (Sandbox Code Playgroud)

我什么也得不到!不是什么该死的事情。

任何线索为什么会发生这种情况,或者我怎样才能弄清楚?当我使用时-d和不运行时docker inspect它都会给我"Type": "json-file", "Config": {}

我在 Ubuntu 18.04 上运行 Docker 18.06.1-ce,构建 e68fc7a。

logging docker

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

Docker - 是否可以创建仅 IPv6 的桥接网络?

是否可以创建仅具有 IPv6 地址的自定义桥接网络?

当我尝试通过以下方式创建自定义桥接网络时:

docker network create --driver bridge --ipv6 --subnet 2001:db8:2::/64 mybridge
Run Code Online (Sandbox Code Playgroud)

并检查我得到的创建的网络:

[
{
    "Name": "mybridge",
    "Id": "b09351a7b7b4936bc0b3fdc7627d4a13ef3260d3f914ae347756f6358ab3a27d",
    "Created": "2019-02-26T11:41:37.261479401Z",
    "Scope": "local",
    "Driver": "bridge",
    "EnableIPv6": true,
    "IPAM": {
        "Driver": "default",
        "Options": {},
        "Config": [
            {
                "Subnet": "172.19.0.0/16",
                "Gateway": "172.19.0.1"
            },
            {
                "Subnet": "2001:db8:2::/64"
            }
        ]
    },
    "Internal": false,
    "Attachable": false,
    "Ingress": false,
    "ConfigFrom": {
        "Network": ""
    },
    "ConfigOnly": false,
    "Containers": {},
    "Options": {},
    "Labels": {}
}
Run Code Online (Sandbox Code Playgroud)

]

当我运行容器时,它会获取 IPV4 地址:

root@ip-10-0-3-167:/home/ubuntu# docker run -d --net mybridge redis
75fac838472a94519f30e2bdbcc10403a7a952fce285ee5d258fd87f0773f618 …
Run Code Online (Sandbox Code Playgroud)

networking ipv6 docker

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

如何从 Docker 中访问 nginx 服务器日志?

我有 Nginx 将请求从浏览器路由到 Express API 或我的 React 服务器,但是,在控制台中,我继续收到待处理的 xhr 请求,然后超时并出现 502 bad gateway 错误,这通常是由于 Nginx 无法将请求传递给“上游”,在本例中是我的 Express API,通常我能够检查文件/var/log/nginx/,但当所有这些都发生在 Docker 容器内时,我不确定如何执行此操作。

\n\n

我尝试过这种docker logs <container name/id>命令方法,但我得到了Error: No such container: <container-id>。

\n\n

我在运行后从最后一行获取了容器 ID docker-compose up --build,它说Successfully built <container-id>

\n\n

我复制了该 ID 并docker logs <container-id>在 iTerm 中的第二个面板上运行。

\n\n

然后我做了一个docker ps并得到了这个输出:

\n\n
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES\nf37be54a9e60        complexly_api       "npm run dev"            43 minutes ago      Up 28 minutes                              complexly_api_1\n9b87bc0aa343 …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose

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

在 Docker 容器中从 Gitlab 进行 Git 克隆速度非常慢

我正在尝试将我们的 Gitlab 存储库克隆到 Docker 容器中,并在运行 Ubuntu 18.04.1 的新虚拟机上运行。

Cloning into ${REPONAME}由于某种原因,当我尝试克隆存储库时,在我们最终开始枚举对象之前,我花了很长时间(几分钟)进行查看。

time git clone https://gitlab.com/gnutls/gnutls.git
Cloning into 'gnutls'...
remote: Enumerating objects: 178256, done.
remote: Counting objects: 100% (178256/178256), done.
remote: Compressing objects: 100% (50440/50440), done.
remote: Total 178256 (delta 128831), reused 173620 (delta 125853)
Receiving objects: 100% (178256/178256), 66.50 MiB | 10.14 MiB/s, done.
Resolving deltas: 100% (128831/128831), done.
real    5m 2.14s
user    0m 14.42s
sys 0m 4.39s
Run Code Online (Sandbox Code Playgroud)

我决定尝试克隆一个不同的存储库,google test该存储库托管在 Github 上,差异令人震惊。

time git clone https://github.com/google/googletest.git
Cloning …
Run Code Online (Sandbox Code Playgroud)

git gitlab docker

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

Docker Compose 和多个子网

我正在努力解决Docker Compose(版本2或版本3)。我正在尝试添加多个subnets,以便各种服务可以相互访问,但从IPv4不同的子网获取分配的地址。

这是我当前的配置:

networks:
  custom:
    driver: "bridge"
    ipam:
      driver: default
      config:
        - subnet: 10.10.10.0/16
          gateway: 10.10.10.1
        - subnet: 100.100.100.0/16
          gateway: 100.100.100.1
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

Creating network "docker-setup-test_custom" with driver "bridge"
ERROR: Pool overlaps with other one on this address space
Run Code Online (Sandbox Code Playgroud)

docker docker-compose

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

Alpine Docker 上的 gcsfuse

我尝试使用 gcsfuse 将应用程序源代码存储在 GCP 存储桶上,这是我的 Dockerfile:

ARG VERSION

FROM golang:1.12.5-alpine3.9 as gcsfuse-builder

ENV GOPATH /go

RUN apk --update add git=2.20.1-r0 fuse=2.9.8-r2 fuse-dev=2.9.8-r2 \
    && go get -u github.com/googlecloudplatform/gcsfuse

FROM php:$VERSION as base

ARG REVISION

ENV APP_DIR=/srv/app \
    APP_ENV=prod \
    APP_FRONT_CONTROLLER=index.php \
    APP_LOCALE=fr \
    APP_USER=test-user \
    APP_USER_GROUP=test \
    APP_PORT=8080 \
    COMPOSER_ALLOW_SUPERUSER=1 \
    NGINX_DIR=/etc/nginx \
    NGINX_VERSION=1.14.2-r1 \
    PHP_FPM_CONF_DIR=/usr/local/etc/php-fpm.d/ \
    SUPERVISORD_CONF_DIR=/etc/supervisor \
    SUPERVISOR_VERSION=3.3.4-r1 \
    BUILD_SCRIPTS_DIR=/build-scripts \
    GOOGLE_APPLICATION_CREDENTIALS=/srv/app/bucket.json

# Supervisord conf to be copied at the end.
COPY docker/prod/php/scripts/*.sh $BUILD_SCRIPTS_DIR/

# Core dependencies installation …
Run Code Online (Sandbox Code Playgroud)

docker google-cloud-platform gcsfuse alpine

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

备份大型 docker 卷、绑定挂载、/var/lib/docker/volumes/ (owncloud)

我在某种程度上“继承”了一个 docker 化的服务器环境,现在我必须实现一个备份概念 - 特别是对于 Owncloud 容器,它将用户文件存储在 docker 卷内。docer 文档 [1] 说“卷比绑定安装有几个优点”,因此“是首选机制”。列出的优点之一是“卷更容易备份”,文档建议使用如下命令来创建卷的 tar 备份:

$ docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
Run Code Online (Sandbox Code Playgroud)

但是,特别是对于备份(我使用 borg 备份将主机文件同步到异地存储库),我发现这种方式有几个缺点:

  • 对于每个备份,您都必须在本地复制整个数据,这需要两倍的磁盘空间和复制时间。
  • 每个备份都会创建一个新的 BLOB - 必须再次复制未更改的文件。
  • 要恢复单个 Owncloud 文件,您必须从备份中恢复整个 tar(在同步到备份之前解压将使所需的磁盘空间增加三倍)。...

我对 docker 还比较陌生,所以我可能还没有对 docker 生态系统有完整的了解。但据我目前所知,对于这种情况,我认为绑定安装是最好的解决方案。无论如何,我也没有从卷的其他优势中受益。或者我错过了什么?使用绑定安装有什么缺点吗?

直接备份 /var/lib/docker/volumes/ 怎么样?

通过搜索,我从 owncloud [2] 中找到了这篇博文,建议直接备份 /var/lib/docker/volumes/owncloud_files/_data 。对我来说,这似乎不是最干净的方式。

不过,考虑到目前的情况,我暂时想走这条路。安全吗?(当然,关于一致性所需的预防措施,例如关闭数据库容器、owncloud 维护模式等 - 我认为这里提到的解决方案以任何方式都需要这些!?)

[1] https://docs.docker.com/storage/volumes/

[2] https://owncloud.org/news/docker-series-pt-3-automatically-easily-backup-restore-dockerized-owncloud/

backup owncloud docker

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

如何在 Windows 中为 docker 配置代理凭据?

手动设置代理在我的企业网络上不起作用。运行 docker 登录时会返回以下错误消息:

Error response from daemon: Get https://a/v2/: Proxy Authentication Required ( ... requires authorization to fulfill the request. Access to the Web Proxy filter is denied.  )
Run Code Online (Sandbox Code Playgroud)

我正在 Windows 10 上运行 docker 实例。

我尝试了以下两种调试方法:

  • 在 URL 中传递凭据,但代理似乎不允许基本身份验证,或者即使允许,也不会接受参数中的凭据。

  • 更改 docker 服务帐户,如此处发布的,但这会破坏 docker 安装。访问管道时,从 PowerShell 发送的命令始终返回错误。

我别无选择。还有其他方法可以解决这个问题吗?

如果我正确理解系统,我需要某种方法将凭据传递给代理,因为代理需要这种方式。此外,它无法从使用本地服务帐户运行的服务获取凭据。

docker

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

我们如何从 GCR 中垃圾收集旧的 docker 镜像?

由于奇怪的历史原因,我们在 GCS 存储桶中存储了 2.14Tb 的数据,用于存储 Google 容器注册表 (GCR) 的 docker 镜像。

我们曾经gcloud container images delete <image>删除了数千个未使用的图像,但是 stackdriver 表示底层 GCS 存储桶中存储的总字节数没有变化。

看起来gcloud container images delete已经从注册表中删除了图像元数据,但没有删除底层。

有没有一种方法可以从 GCS 中垃圾收集未使用的数据并减少每月的费用?

接受答案后更新

这是我们的 GCS 存储桶中对象总大小的图表 - 看起来对象大约每 24 小时被垃圾收集一次(在我们的例子中大约是 UTC 中午)

在此输入图像描述

docker google-cloud-platform

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