标签: docker

从 docker 容器连接到 docker 主机

我有一个设置,可以在 docker 容器中运行我网站的所有部分。我侦听端口 80 和 443 的 nginx 在容器中运行。

363292a98545        scivm/nginx-django-scivmcom:latest   /usr/bin/supervisord   12 days ago         Ghost               0.0.0.0:40001->22/tcp, 88.198.57.112:443->443/tcp, 88.198.57.112:80->80/tcp     lonely_feynmann           
Run Code Online (Sandbox Code Playgroud)

我想为另一个容器中的服务设置代理。此容器绑定到主机上的端口 3000:

b38c8ef72d0a        mazzolino/strider-dind:latest        wrapdocker /usr/bin/   41 minutes ago      Up 41 minutes       0.0.0.0:3000->3000/tcp, 22/tcp, 27017/tcp                                       distracted_einstein      
Run Code Online (Sandbox Code Playgroud)

我在 docker 主机上的 iptables 如下所示:

root@Ubuntu-1204-precise-64-minimal /var/run # iptables -L
Chain INPUT (policy ACCEPT) target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp …
Run Code Online (Sandbox Code Playgroud)

networking docker

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

停止 mysql docker 容器的安全方法是什么?

我使用 Docker 运行 mysql 容器。我从喜欢开始

sudo docker -d --name mysql -p 3306:3306 -v /var/lib/mysql:/var/lib/mysql mysql_image 
Run Code Online (Sandbox Code Playgroud)

我怀疑通过停止 docker 来停止 mysql 是不安全的。我错了吗?

sudo docker stop mysql
Run Code Online (Sandbox Code Playgroud)

首先在容器内停止 mysql 是否更安全?

sudo docker exec mysql /usr/bin/mysqladmin shutdown
Run Code Online (Sandbox Code Playgroud)

mysql docker

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

无法使用 RUN 从 Dockerfile 写入 /etc/hosts 文件

我正在使用一个非常简单的 Dockerfile 制作一个 docker 镜像。在 Dockerfile 里面,我有这个命令:

RUN printf "192.92.13.243 www.hahaha.com \n" >> /etc/hosts
Run Code Online (Sandbox Code Playgroud)

命令本身似乎没问题,因为此时图像的创建不会停止。

问题是:运行映像时,应该插入“/etc/hosts”中的行不存在。

现在,我四处搜索,发现在 docker 1.2 版本之前,容器内的主机文件存在问题。就我而言,我使用的是目前最新的 1.5 版。

我错过了什么吗?

更新1:

在 docker 的 github 页面中,似乎有很多问题,无论是开放的还是封闭的。

hosts-file docker

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

将日志日志获取到纯文本文件

我想将日志日志记录到一个文件中,以便稍后可以获取它并将其发送到 Logstash。我考虑过运行 syslog-ng 并使其成为 Journald 的客户端,这样我就可以获得 syslog 文件。我在 CoreOS 机器上使用 Docker 容器,因此我尝试将 syslog-ng 作为 CoreOS docker 主机中的容器运行,创建一个执行该容器的 systemd 单元。我按照此页面在 systemd 中获取 syslog,但是如果我尝试使 syslog-ng 容器直接从主机中的 syslog 套接字读取(通过使用 docker 卷安装它),它会抱怨“地址已在使用中”。所以我有日志记录,一个运行 syslog-ng 的容器,但我不知道如何在 syslog-ng 内获取日志日志。

我在文件中获取日志日志的替代解决方案是运行一个执行 的 systemd 单元journalctl -f --json | tee -a /var/log/systemd,但我不确定该解决方案的可靠性。这是一个足够好的解决方案吗?

syslog systemd docker journald

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

Windows nanoserver 可以在 Linux docker 中运行吗?

https://msdn.microsoft.com/en-us/virtualization/windowscontainers/deployment/deployment_nano谈到在 Windows 下运行 nanoserver docker 镜像:

码头工人拉微软/纳米服务器

这是否意味着我们应该能够在 Docker 运行的任何地方(例如 Linux)运行 nanoserver?

docker windows-nano-server

9
推荐指数
2
解决办法
6392
查看次数

Ecs 服务不更新任务定义

在 ecs 集群中,我有一个运行着 2 个 ec2 实例的服务。我更新了任务定义以获取新的 docker 镜像。但即使有新的任务定义,旧的任务定义仍在运行。

我已使用以下命令更新任务定义和服务。

aws ecs register-task-definition --family service90-task --cli-input-json file://service90-task.json

aws ecs update-service --cluster service90-cluster --service service90-service --desired-count 0

TASK_REVISION=`aws ecs describe-task-definition --task-definition service90-task | egrep "revision" | tr "/" " " | awk '{print $2}' | sed 's/"$//'`

aws ecs update-service --cluster service90-cluster --service service90-service --task-definition service90-task:${TASK_REVISION} --desired-count 2
Run Code Online (Sandbox Code Playgroud)

我尝试了几次,但无法弄清楚我哪里出错了。我想让 ecs 服务运行新的任务定义而不是旧的。

amazon-ec2 amazon-web-services docker amazon-ecs

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

如何使用 python docker-py 连接到 AWS ECR

从命令行运行时,要从特定注册表中提取,我可以运行以下命令:

dockerCommand=$("aws ecr get-login --profile profileName --region us-west-2")
$dockerCommand  (which looks like docker login -u AWS -p ..longPassword.. -e none https://ACCTID.dkr.ecr.us-west-2.amazonaws.com
docker pull ACCTID.dkr.ecr.us-west-2.amazonaws.com/REPO/NAME:TAGNAME
Run Code Online (Sandbox Code Playgroud)

如果我想要一个不同的注册表,我会更改区域或配置文件名称

用 docker-py 试试这个,我有

import boto3
import docker
dockerClient = docker.from_env()

session = boto3.setup_default_session(profile_name='vzw')
client = session.client('ecr', region_name='us-west-2')

token = client.get_authorization_token(registryIds=[registryId])

username = 'AWS'
password = token['authorizationData'][0]['authorizationToken']
registry = token['authorizationData'][0]['proxyEndpoint']
regClient = dockerClient.login(username, password, registry)
Run Code Online (Sandbox Code Playgroud)

但dockerClient拒绝与以下内容的联系:

错误的用户名或密码

从那里开始,一旦工作正常,我将想要使用 docker 客户端拉/推在注册表之间移动图像。

是正确的方向还是我应该尝试完全使用 shell 脚本来实现?(Python 对于描述每个注册表中的内容的 boto 调用特别有价值)

python docker amazon-ecr

9
推荐指数
4
解决办法
8619
查看次数

从私有 Docker 注册表中删除标签的简单方法?

我有一个私有 Docker 注册表 v2.6.0,其中包含一个映像上的几个标记版本:

foo/bar:1
foo/bar:1_keep    (same image as 1)
foo/bar:2
foo/bar:3
foo/bar:latest    (same image as 3)
Run Code Online (Sandbox Code Playgroud)

我想删除单个标签而不必删除图像。因此,如果我删除标签 2,则可以删除该图像,因为没有其他内容引用它。但是如果我删除标签 1,只有那个标签应该去,而不是图像。

这表明 API 请求是这样的:

DELETE http://repo/v2/foo/bar/tags/1
Run Code Online (Sandbox Code Playgroud)

但这给了我一个 404。相反,我必须删除清单,这意味着做所有检查它没有被另一个标签使用的工作。

我查看了https://github.com/fraunhoferfokus/deckschrubber的来源,它似乎并没有在检查删除手稿是否安全时遇到麻烦。我错过了什么吗?

有没有更好的方法来做到这一点?如果没有,为什么不,它可能会被修复?

docker docker-registry

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

两个堆栈的两个docker容器之间的连接

我正在构建两个共享一些通用数据的项目。这两个项目的服务是由两个 docker-compose YML 文件构建的。我想从一个堆栈中运行的Python脚本访问另一个堆栈中指定的MySQL服务器。

我是通过连接到内部 docker IP 来实现的。但是我发现服务器重启后IP就变了。我尝试通过容器名称进行连接,或在 docker-compose YML 文件中“链接”容器名称。两者都不起作用。我认为在两个堆栈之间共享一个 docker 网络接口应该可以解决问题。

我可以知道如何在两个 docker-compose YML 文件中指定“网络”吗?

或者,有没有更好的方法来实现这一目标?

谢谢。

docker docker-compose

9
推荐指数
1
解决办法
5849
查看次数

同一主机上的 KVM VM 和 docker 容器之间的网络

在 Debian-Stretch 主机(连接到物理 LAN)上,我有一个新的 docker 安装(v18.09)和一个数据库容器(端口映射到主机),我运行 KVM/libvirt 和一些 Debian-Stretch VM。我可以从 LAN 访问 docker 容器和 VM(取决于通过 SSH 隧道或直接配置的配置),但我很难从 VM 访问 docker 容器。

在此处输入图片说明

# brctl show
bridge name         bridge id           STP enabled interfaces
br-f9f3ccd64037     8000.0242b3ebe3a0   no      
docker0             8000.024241f39b89   no      veth35454ac
virbr0              8000.525400566522   yes     virbr0-nic
Run Code Online (Sandbox Code Playgroud)

在阅读了几天之后,我在这篇文章中找到了一个非常引人注目的解决方案Docker 和 KVM 带有一个我没有开始工作的桥(原始)。该解决方案建议使用一行配置 daemon.json 代码启动 docker 以使用 KVM“默认”网桥。那该有多好!有希望吗?

我在 KVM 虚拟机之间尝试了两种不同的网络配置。在这两种情况下,VM 与 LAN+路由器+云之间的通信都完美无缺,但我只是不知道如何越过围栏 - 到更绿的草地...... :)

Conf 1 - KVM 默认桥接与 NAT:我可以通过 ssh 连接到 Debian 主机并访问 docker 容器端口,但是否有直接路由的设置?

会议 2 - …

libvirt linux-networking kvm-virtualization docker debian-stretch

9
推荐指数
1
解决办法
9703
查看次数