我在 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 主机的容器中运行的进程?
参考:
我有以下 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。
是否可以创建仅具有 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) 我有 Nginx 将请求从浏览器路由到 Express API 或我的 React 服务器,但是,在控制台中,我继续收到待处理的 xhr 请求,然后超时并出现 502 bad gateway 错误,这通常是由于 Nginx 无法将请求传递给“上游”,在本例中是我的 Express API,通常我能够检查文件/var/log/nginx/,但当所有这些都发生在 Docker 容器内时,我不确定如何执行此操作。
我尝试过这种docker logs <container name/id>命令方法,但我得到了Error: No such container: <container-id>。
我在运行后从最后一行获取了容器 ID docker-compose up --build,它说Successfully built <container-id>
我复制了该 ID 并docker logs <container-id>在 iTerm 中的第二个面板上运行。
然后我做了一个docker ps并得到了这个输出:
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) 我正在尝试将我们的 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) 我正在努力解决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) 我尝试使用 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 化的服务器环境,现在我必须实现一个备份概念 - 特别是对于 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 备份将主机文件同步到异地存储库),我发现这种方式有几个缺点:
我对 docker 还比较陌生,所以我可能还没有对 docker 生态系统有完整的了解。但据我目前所知,对于这种情况,我认为绑定安装是最好的解决方案。无论如何,我也没有从卷的其他优势中受益。或者我错过了什么?使用绑定安装有什么缺点吗?
直接备份 /var/lib/docker/volumes/ 怎么样?
通过搜索,我从 owncloud [2] 中找到了这篇博文,建议直接备份 /var/lib/docker/volumes/owncloud_files/_data 。对我来说,这似乎不是最干净的方式。
不过,考虑到目前的情况,我暂时想走这条路。安全吗?(当然,关于一致性所需的预防措施,例如关闭数据库容器、owncloud 维护模式等 - 我认为这里提到的解决方案以任何方式都需要这些!?)
手动设置代理在我的企业网络上不起作用。运行 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 发送的命令始终返回错误。
我别无选择。还有其他方法可以解决这个问题吗?
如果我正确理解系统,我需要某种方法将凭据传递给代理,因为代理需要这种方式。此外,它无法从使用本地服务帐户运行的服务获取凭据。
由于奇怪的历史原因,我们在 GCS 存储桶中存储了 2.14Tb 的数据,用于存储 Google 容器注册表 (GCR) 的 docker 镜像。
我们曾经gcloud container images delete <image>删除了数千个未使用的图像,但是 stackdriver 表示底层 GCS 存储桶中存储的总字节数没有变化。
看起来gcloud container images delete已经从注册表中删除了图像元数据,但没有删除底层。
有没有一种方法可以从 GCS 中垃圾收集未使用的数据并减少每月的费用?
这是我们的 GCS 存储桶中对象总大小的图表 - 看起来对象大约每 24 小时被垃圾收集一次(在我们的例子中大约是 UTC 中午)