我有一个设置,可以在 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) 我使用 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) 我正在使用一个非常简单的 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 页面中,似乎有很多问题,无论是开放的还是封闭的。
我想将日志日志记录到一个文件中,以便稍后可以获取它并将其发送到 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,但我不确定该解决方案的可靠性。这是一个足够好的解决方案吗?
https://msdn.microsoft.com/en-us/virtualization/windowscontainers/deployment/deployment_nano谈到在 Windows 下运行 nanoserver docker 镜像:
码头工人拉微软/纳米服务器
这是否意味着我们应该能够在 Docker 运行的任何地方(例如 Linux)运行 nanoserver?
在 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 服务运行新的任务定义而不是旧的。
从命令行运行时,要从特定注册表中提取,我可以运行以下命令:
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 调用特别有价值)
我有一个私有 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-compose YML 文件构建的。我想从一个堆栈中运行的Python脚本访问另一个堆栈中指定的MySQL服务器。
我是通过连接到内部 docker IP 来实现的。但是我发现服务器重启后IP就变了。我尝试通过容器名称进行连接,或在 docker-compose YML 文件中“链接”容器名称。两者都不起作用。我认为在两个堆栈之间共享一个 docker 网络接口应该可以解决问题。
我可以知道如何在两个 docker-compose YML 文件中指定“网络”吗?
或者,有没有更好的方法来实现这一目标?
谢谢。
在 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
docker ×10
amazon-ec2 ×1
amazon-ecr ×1
amazon-ecs ×1
hosts-file ×1
journald ×1
libvirt ×1
mysql ×1
networking ×1
python ×1
syslog ×1
systemd ×1