在我们的团队中,我们正在转换到Docker以在我们的服务器上部署所有内容.
我们使用Docker Swarm和多个(10+)撰写文件来定义大量(20+)服务.到目前为止,一切都运行良好,除非我们使用docker stack rm <name>(并重新部署使用docker stack deploy <options> <name>)取下堆栈:大约每隔一次,我们会收到以下错误:
Failed to remove network <id>: Error response from daemon: network <id> not foundFailed to remove some resources from stack: <name>
Run Code Online (Sandbox Code Playgroud)
使用时docker network ls,网络确实没有被删除,但是,docker network rm <id>总是导致以下结果:
Error response from daemon: network <id> not found
Run Code Online (Sandbox Code Playgroud)
更奇怪的是,docker network inspect <id>返回正常输出的事实.网络始终overlay是使用用于部署堆栈的撰写文件创建的网络.目前,我们的Swarm中只有一个节点.
我们当前的"解决方法"是重新启动Docker(解决问题),但这在生产环境中不是可行的解决方案.离开群并再次加入它也不能解决问题.
起初,我们认为这个问题只与Docker for Mac有关(因为我们第一次遇到本地机器上的问题),但Debian Stretch也出现了同样的问题.在这两种情况下,我们都使用最新的Docker发行版.
我真的很感激任何帮助!
我有一种情况限制负载均衡器网络中的容器的互联网访问.例如在下面的图片中
只有container4连接到Internet; 其他三个只通过容器4与外界进行通信.例如,如果container1需要smtp支持,它会将smtp请求转发给container4以获取访问权限.
除了container4之外,不应允许其他容器直接访问Internet!这应该在Docker级别上强制执行.
我相信它可以在docker网络创建上进行配置,任何人都可以解释如何实现这一点吗?
我正在尝试使用host.docker.internal(如https://docs.docker.com/docker-for-windows/networking/#use-cases-and-workarounds 中推荐的那样)连接到在我的本地计算机上运行的 SQL Server 实例
在host.docker.internal成功地解析为IP,它的响应ping操作
我在防火墙配置中打开了端口1433
错误信息
连接被拒绝 192.168.65.2:1433
我的连接字符串
Data Source=host.docker.internal,1433;Initial Catalog=;Persist Security Info=False;User ID=;Password=;MultipleActiveResultSets=True;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
码头工人版本
Client:
Version: 18.03.1-ce
API version: 1.37
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:12:48 2018
OS/Arch: windows/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.03.1-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:22:38 2018
OS/Arch: linux/amd64
Experimental: true
Run Code Online (Sandbox Code Playgroud)
Docker for windows 版本
试图了解docker网络,Docker自动创建以下网络:
# docker network ls
NETWORK ID NAME DRIVER SCOPE
67b4afa88032 bridge bridge local
c88f997a2fa7 host host local
1df2947aad7b none null local
Run Code Online (Sandbox Code Playgroud)
我知道桥接网络代表所有Docker安装中存在的docker0网络,从链接引用.
有人可以帮助我理解其他网络,主机和没有,如果可能的话,举例.
假设我们只在开发的某些阶段很少需要这样做(以冒烟测试一些 api 调用),那么让项目 Bar 中的 dockerized web 服务访问 Project Foo 中的 dockerized web 服务的最简单方法是什么?
在开发 Mac 上,Docker Engine:18.09.2,Compose:1.23.2,我们有 Project Foo 和 Project Bar,它们都有自己的 docker-compose 文件,每个文件都有一个 Web 服务和一个数据库服务。
通常它们是独立运行的,并且是独立开发的。
然而,Project Foo 的 Web 服务托管了一个 API,我们只是偶尔想从 Project Bar 的 Web 容器中访问它
它们被分配到不同的主机端口, docker ps显示 Project Foo 使用端口 0.0.0.0:3000->3000/tcp(例如,我们使用 localhost:3000 从 Mac 浏览器访问 web 服务。Project Bar 使用端口 0.0.0.0:3010 ->3010/tcp
docker inspect Foo 显示其 IP 地址为“172.18.0.3”(网关“172.18.0.1”),Bar 显示其 IP 地址为“172.22.0.4”(网关“172.22.0.1”)
docker network ls 显示他们都使用相同的“桥接”驱动程序。
这两个项目都在 Mac 上运行,总共 4 个容器,(Foo 上的 web+db,Bar 上的 web+db)
如果在 …
我有一个依赖于多个 docker 容器的应用程序。我使用 docker compose 以便它们都在同一个网络中进行容器间通信。但是,我的两个容器正在各自的容器内侦听相同的端口 8080,但是映射到主机上的不同端口:8072,8073。对于容器间通信,因为我们使用容器的端口,这会导致问题吗?
约束:
我是 docker 新手,我不知道如何解决这个问题。
谢谢
我正在创建一个应用程序,它允许用户上传视频文件,然后进行一些处理。
我有两个容器。
Nginx 为用户可以上传视频文件的网站提供服务的容器。 FFmpeg安装了一些其他处理工具的视频处理容器。我想要达到的目标。我需要容器 1 才能在容器 2 上运行 bash 脚本。
据我所知,一种可能性是让它们通过 API 通过 HTTP 进行通信。但随后我需要在容器 2 中安装一个 Web 服务器并编写一个 API,这似乎有点矫枉过正。我只想执行一个 bash 脚本。
有什么建议?
我正在尝试将我的容器部署到docker swarm集群(docker engine 1.12.1).
docker swarm模式的功能确实令人兴奋,如集群docker,多主机组网.
但是我发现目前为止无法在群集模式下存档(docker 1.12.x),这在使用docker run启动容器时效果很好.
我的主机有用于Intranet网络的eth0,用于Internet网络的eth1.我想只发布docker service createIntranet网络上部署的服务.但是,服务将在创建服务后监听eth0和eth1接口docker service create --name my_web --publish 8000:80 my_web_image.
存档my_web服务的任何解决方案/解决方法只能监听eth0接口?
我们将微服务应用程序停靠,我遇到了一些发现问题.
该应用程序配置如下:
当服务以"非本地"模式启动时,它使用Consul作为其Discovery注册表.当服务以"本地"模式启动时,它会自动绑定每个服务的地址(例如,tcp:// localhost:61001,tcp:// localhost:61002等等.硬编码地址)
在对应用程序进行docker化之后(目前只针对本地模式)每个服务都是一个容器(Docker镜像用docker-compose编排.如果这很重要,还有docker-machine)但是一个服务不能与另一个服务交互,因为它们不是在同一台机器上,tcp:// localhost:61001显然不起作用.
使用带有链接的 docker-compose 并将localhost指定为别名(service:localhost)不起作用.2个容器是否有办法"共享"同一个本地主机?
如果没有,最好的方法是什么?我考虑过为每个服务使用特定的主机名,然后在docker-compose的links部分指定主机名.(但我怀疑这是优雅的解决方案)或者可能使用Consul的版本化的Consul并与之集成?
这篇文章:如何在两个不同的Docker容器之间共享localhost?提供了一些关于为什么不应该混淆localhost的见解 - 但我仍然对这里的正确方法感到困惑.
谢谢!
docker consul microservices docker-compose docker-networking
在nginx-proxyDocker容器内部(下面有更多信息),我总是看到每个连接都有相同的IP地址:( 172.18.0.1这是nginx-proxy网络网关).例如:
nginx.1 | www.my-site.tld 172.18.0.1 - - [28/Nov/2017:17:22:21 +0000] "GET /some/path HTTP/2.0" 200 46576 "https://www.my-site.tld/some/path" "Mozilla/5.0 (Linux; Android 4.4.2; PSP5507DUO Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 YaBrowser/17.10.0.446.00 Mobile Safari/537.36"
Run Code Online (Sandbox Code Playgroud)
无论我是从外部网络,本地机器,还是从服务器(主机)本身发出请求,IP地址始终是172.18.0.1.
我需要的是看到真正的客户端IP.
我搜索了很多,并尝试了不同的解决方案,但没有一个适合我.我尝试了以下方法:
--userland-proxy=false(没有运气);--net=host(根本不是解决方案,也不起作用).相关链接:
那么,有什么想法吗?似乎是iptables路由问题或内部Docker错误.无论如何,它肯定与Docker有关,因为以下显示正确的远程用户IP:
[root@server]# nc -lv 12345
[user@remote-client]$ nc -vz MY.IP.ADDRESS.HERE 12345
Run Code Online (Sandbox Code Playgroud)
很奇怪!
现在我将提供有关系统的完整信息,请耐心等待.:)
我安装了Centos 7.4和Docker:
# cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)
# uname -r
3.10.0-693.5.2.el7.x86_64
# …Run Code Online (Sandbox Code Playgroud) networking docker docker-networking firewalld jwilder-nginx-proxy