标签: docker-networking

找不到Docker网络

在我们的团队中,我们正在转换到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发行版.

我真的很感激任何帮助!

docker docker-swarm docker-networking

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

限制Internet访问 - Docker容器

我有一种情况限制负载均衡器网络中的容器的互联网访问.例如在下面的图片中

方便您参考

只有container4连接到Internet; 其他三个只通过容器4与外界进行通信.例如,如果container1需要smtp支持,它会将smtp请求转发给container4以获取访问权限.

除了container4之外,不应允许其他容器直接访问Internet!这应该在Docker级别上强制执行.

我相信它可以在docker网络创建上进行配置,任何人都可以解释如何实现这一点吗?

docker docker-networking

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

使用 host.docker.internal 从 docker 连接到本地机器(主机)中的 SQL Server

我正在尝试使用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 版本

适用于 Windows 的 Docker

sql-server docker docker-networking docker-for-windows

15
推荐指数
1
解决办法
8208
查看次数

在docker中使用HOST和NONE网络有什么用?

试图了解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网络,从链接引用.

有人可以帮助我理解其他网络,主机没有,如果可能的话,举例.

docker docker-networking

14
推荐指数
2
解决办法
7793
查看次数

docker 容器 A 可以使用什么 URL 来访问另一个 docker 容器 B(相同的开发机器,不同的项目)

假设我们只在开发的某些阶段很少需要这样做(以冒烟测试一些 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-compose docker-networking

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

具有相同容器端口的多个 docker 容器连接到同一网络

我有一个依赖于多个 docker 容器的应用程序。我使用 docker compose 以便它们都在同一个网络中进行容器间通信。但是,我的两个容器正在各自的容器内侦听相同的端口 8080,但是映射到主机上的不同端口:8072,8073。对于容器间通信,因为我们使用容器的端口,这会导致问题吗?

约束:

  1. 我的应用程序需要两个容器才能运行。因此,我无法将具有相同内部端口的另一个容器隔离到不同的网络
  2. 所有容器都应该在同一台主机上运行。

我是 docker 新手,我不知道如何解决这个问题。

谢谢

port networking docker docker-compose docker-networking

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

如何从一个 docker 容器执行命令到另一个

我正在创建一个应用程序,它允许用户上传视频文件,然后进行一些处理。

我有两个容器。

  1. Nginx 为用户可以上传视频文件的网站提供服务的容器。
  2. FFmpeg安装了一些其他处理工具的视频处理容器。

我想要达到的目标。我需要容器 1 才能在容器 2 上运行 bash 脚本。

据我所知,一种可能性是让它们通过 API 通过 HTTP 进行通信。但随后我需要在容器 2 中安装一个 Web 服务器并编写一个 API,这似乎有点矫枉过正。我只想执行一个 bash 脚本。

有什么建议?

docker docker-networking docker-container docker-command

11
推荐指数
3
解决办法
9011
查看次数

如何将已发布的端口绑定到docker swarm模式中的特定eth [x]

我正在尝试将我的容器部署到docker swarm集群(docker engine 1.12.1).

docker swarm模式的功能确实令人兴奋,如集群docker,多主机组网.

但是我发现目前为止无法在群集模式下存档(docker 1.12.x),这在使用docker run启动容器时效果很好.

我的主机有用于Intranet网络的eth0,用于Internet网络的eth1.我想只发布docker service createIntranet网络上部署的服务.但是,服务将在创建服务后监听eth0eth1接口docker service create --name my_web --publish 8000:80 my_web_image.

存档my_web服务的任何解决方案/解决方法只能监听eth0接口?

docker docker-swarm docker-networking

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

可以(或应该)2个docker容器通过localhost相互交互吗?

我们将微服务应用程序停靠,我遇到了一些发现问题.

该应用程序配置如下:

当服务以"非本地"模式启动时,它使用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

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

如何使Docker容器看到真正的用户IP?

问题

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.

试图解决

我搜索了很多,并尝试了不同的解决方案,但没有一个适合我.我尝试了以下方法:

  • 禁用firewalld(在这种情况下什么都不起作用,当然,iptables是空的);
  • 使用--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

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