我得到:
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) Redis 集群要求所有节点都能看到对方聊天;为了适应一些琐碎的情况(例如,所有节点都公开的 docker),提供了一些额外的配置选项:
cluster-announce-ip 10.1.1.5
cluster-announce-port 6379
cluster-announce-bus-port 6380
Run Code Online (Sandbox Code Playgroud)
(有关这些选项的唯一可用文档,请参阅http://download.redis.io/redis-stable/redis.conf)
请注意,这些值被硬编码到配置文件中。这是非常不方便的。
是否可以以某种方式将 redis 配置为使用主机名而不是端点的 IP?有什么解决方法吗?
作为为什么需要这样做的具体示例,请考虑尝试通过 Dockerfile 在单个容器上具有多个 redis 实例的 docker 镜像中配置测试 redis 集群:
如果cluster-announce-ip
设置了,则所有节点都尝试通过 进行聊天cluster-announce-ip
。
如果cluster-announce-ip
是外部IP,由于docker镜像在运行-p
期间没有运行docker build...
,外部IP不可用,无法配置集群。
如果cluster-announce-ip
未设置,则可以配置集群,但由于 ip 是 docker-internal,一旦集群运行,就无法从外部看到它(外部客户端会在收到MOVED 10.0.0.x:2321
外部客户端不可见的a 时抱怨)。
您必须使用docker build ...
然后手动配置节点来docker commit ...
对结果进行快照。\
当您在不同的物理主机上运行容器时,您必须手动更新映像以更改公告 ip(使用 DHCP 时,这变得更加成问题)。
我很欣赏 docker swarm 是解决这个问题的一种可能的解决方案,但对于测试目的(例如本地开发),它不是一个相关的解决方案。
简单地使用主机名而不是 ips 将允许开发人员只使用主机文件条目进行连接,而不必为每个开发人员手动更新 docker 映像(显然每个开发机器都有自己的外部 ip)。