标签: docker

--memory-reservation 标志在实践中有何作用?

文档说:

在这种配置下,当容器消耗内存超过200M且小于500M时,下次系统内存回收尝试将容器内存收缩到200M以下。

但这实际上意味着什么?

假设我有一个运行 Solr 的容器,并且:
docker run -m 1G --memory-reservation 768M solr

开始使用800M内存时,对容器内部的Solr进程有什么影响?没有?

是否仅当/当内存使用量随后降至 768M 以下时...此标志允许 docker 从 solr 容器中回收内存?...否则容器将继续消耗高水位内存使用情况?

这与群调度有什么关系?如果 swarm 总是为容器分配 1G 因为-m那么--memory-reservation在这种情况下没有用?

docker

8
推荐指数
1
解决办法
6262
查看次数

如何将服务的前缀/标签添加到主管标准输出输出

当我必须在一个图像中运行多个服务(例如 postfix 和其他邮件服务)时,我在 docker 图像中使用主管。当我将所有服务的 stdout/stderr 重定向到主管并且主管也登录到 stdout/stderr 时,我希望在控制台上的实际日志输出前面有一个前缀/标签,以了解哪个日志来自哪个服务。我找不到任何配置设置,但也许你知道一种方法。

以下是 Foreman 的示例: 工头日志输出

logging supervisord docker

8
推荐指数
2
解决办法
1809
查看次数

Kubernetes - 如何将 docker run 命令行参数映射到 kubectl 命令行

我需要在 Kubernetes 中运行这个 Docker 命令:

docker run -p 8080:8080 sagemath/sagemath sage -notebook
Run Code Online (Sandbox Code Playgroud)

我可以映射除“-notebook”之外的所有内容 - 有谁知道怎么做?

这是我到目前为止所拥有的,当然它不起作用,因为“-notebook”没有正确转换为 kubectl:

kubectl run --image=sagemath/sagemath sage --port=8080 --type=LoadBalancer -notebook
Run Code Online (Sandbox Code Playgroud)

command-line-interface docker kubernetes

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

docker volume rm --force 没有影响

根据官方文档,可以“强制”删除卷。文档中的--force. 到目前为止,我在网络上发现的这意味着删除其他容器仍在使用的卷。

使用该--force选项似乎没有影响:

$ docker volume create mydata
$ docker docker run -v mydata:/mydata alpine:latest /bin/sh -c "touch /mydata/mydata.test; ls /mydata"
$ docker volume rm --force mydata
Error response from daemon: unable to remove volume: remove mydata: volume is in use - [1cbcfa3d47a32db7b0075e113216f7146a436a4da22a97dc2f7b60c68de95c3d]
Run Code Online (Sandbox Code Playgroud)

这与省略--force标志时的输出相同。这是一个错误还是我误解了什么?

$ docker version
Client:
 Version:       18.01.0-ce
 API version:   1.35
 Go version:    go1.9.2
 Git commit:    03596f5
 Built: Wed Jan 10 20:09:13 2018
 OS/Arch:       linux/amd64
 Experimental:  false
 Orchestrator:  swarm
Server: …
Run Code Online (Sandbox Code Playgroud)

docker

8
推荐指数
2
解决办法
8847
查看次数

如何在 Windows Server 2016 上运行 Linux Docker 容器?

我得到:

PS C:\tmp> docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
no matching manifest for windows/amd64 in the manifest list entries
Run Code Online (Sandbox Code Playgroud)

现在,在你说“复制!”之前,“确保它处于实验模式”,就像这个问题的所有其他答案一样,我有.

我已按照基于 LinuxKit 的 LCOW 映像的说明进行操作,甚至阅读并按照步骤从在 Windows 上运行 Linux 容器手动创建 hyper-v 映像。

我已经下载了 Docker 的夜间版本。

我在实验模式下运行:

PS C:\tmp> docker version
Client:
 Version:       master-dockerproject-2018-02-01
 API version:   1.36
 Go version:    go1.9.3
 Git commit:    26a2a459
 Built: Thu Feb  1 23:50:28 2018
 OS/Arch:       windows/amd64
 Experimental:  false
 Orchestrator:  swarm

Server:
 Engine:
  Version:      master-dockerproject-2018-02-01 …
Run Code Online (Sandbox Code Playgroud)

docker

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

如何在 docker 容器内的命名空间内挂载私有 /proc?

我需要在 Docker 容器内创建命名空间。作为其中的一部分,我需要将/proc私有挂载到内部命名空间。我意识到我必须以特定权限运行容器才能实现这一点,但我更愿意启用最小集。

这有效:

$ sudo docker run --privileged --security-opt=seccomp=unconfined \
 -it fedora:rawhide /usr/bin/unshare -Ufmp -r \
 /bin/sh -c 'mount -t proc proc /proc'
Run Code Online (Sandbox Code Playgroud)

这不会:

$ sudo docker run --cap-add=sys_admin --security-opt=seccomp=unconfined \
  -it fedora:rawhide /usr/bin/unshare -Ufmp -r \
   /bin/sh -c 'mount -t proc proc /proc'
mount: /proc: cannot mount proc read-only.
Run Code Online (Sandbox Code Playgroud)

因此,仅关闭 seccomp 过滤器并添加CAP_SYS_ADMIN是不够的。什么是足够了吗?

更新: Selinux 是问题的一部分。如果您全局关闭 selinux 强制,它会起作用。但是,您也可以使用 关闭对特定容器的强制执行--security-opt label:disable,这在在线 Docker 手册的安全配置部分有记录:

sudo docker run --cap-add=sys_admin --security-opt …
Run Code Online (Sandbox Code Playgroud)

security namespaces docker

8
推荐指数
1
解决办法
6955
查看次数

Docker 服务在 ZFS 之前启动

我在 Ubuntu 16.04 上使用 Docker CE,使用 ZFS 作为 Docker 的存储。设置非常标准:

  1. 有一个 zpool 有多个磁盘
  2. 在 zpool 上,有一个带有 mountpoint 的 zfs 文件系统/var/lib/docker。
  3. Docker 看到文件系统是 ZFS,并自动使用它

大部分时间一切正常。但是,有时当我的 VM 启动时,zpool 无法挂载。我相信(虽然我不是 100% 确定)这是因为 Docker 服务在 ZFS 文件系统安装之前启动,实际上我看到/var/lib/docker在根 FS 上创建了一个文件夹。

如何确保在挂载所有 ZFS 文件系统之前 Docker 服务不会启动?

ubuntu zfs zfsonlinux docker ubuntu-16.04

8
推荐指数
1
解决办法
3153
查看次数

如何访问另一个堆栈中的服务?

我有一个 docker swarm 配置,在那里我部署了两个堆栈(main和mon),我可以在一个堆栈中公开一个端口,我可以从另一个堆栈中引用它。但是,我试图找到一种不这样做的方法,而是让它使用 127.0.0.11 DNS 访问它。

在mon我有一项名为grafana

使用https://docs.docker.com/docker-cloud/apps/service-links/#discovering-services-or-containers-on-another-stack这表明我可以使用堆栈名称来引用它没有当我尝试ping grafana.mon它时,它只返回无效的主机名。

docker docker-swarm

8
推荐指数
1
解决办法
5814
查看次数

将更新/升级语句放在 Dockerfile 中是一个好习惯吗?

Docker 的新手,我正在努力使其正确。

我想创建一个 docker 容器来“深度冻结”使用 bash 脚本和大量依赖项创建的应用程序,这样我就不必再维护它了。我认为 docker 会帮助我解决这个问题。将更新/升级语句放在 Dockerfile 中(如“apt-get upgrade”)是一个好习惯吗?这不会在未来破坏应用程序,这是 docker 应该阻止的吗?

docker

8
推荐指数
2
解决办法
8979
查看次数

Nginx 对 https 请求返回 400

我已经使用 letencrypt 设置了 nginx 以使用 https。我/etc/nginx/conf.d/app.conf的如下(没有server配置其他指令):

server {

        location /.well-known/acme-challenge/ {
                autoindex on;
                root /var/www/certbot/;
        }

        location / {
                return 301 https://$host$request_uri;
        }

        server_name example.com;
        listen 80;
}

server {
        listen 443;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

        server_name example.com;

        location /.well-known/acme-challenge/ {
                root /var/www/certbot;
        }

        location /static/ {
                gzip on;
                gzip_static on;
                gzip_types text/plain text/css text/javascript application/javascript;
                gzip_disable "msie6";

                alias /static/;
                autoindex off;
        }

        # many other locations
}
Run Code Online (Sandbox Code Playgroud)

当我尝试打开时https://example.com,nginx 返回 …

nginx https docker

8
推荐指数
1
解决办法
5995
查看次数