是否有可能在同一主机内的不同网络中进行通信?请注意,我目前不使用docker-compose.
以下是我所做的总结.我使用以下命令创建了两个网络
docker network create --driver bridge mynetwork1
docker network create --driver bridge mynetwork2
Run Code Online (Sandbox Code Playgroud)
然后我使用以下命令在这些创建的网络中运行了两个容器:
docker run --net=mynetwork1 -it name=mynet1container1 mycontainerimage
docker run --net=mynetwork1 -it name=mynet1container2 mycontainerimage
docker run --net=mynetwork2 -it name=mynet2container1 mycontainerimage
docker run --net=mynetwork2 -it name=mynet2container2 mycontainerimage
Run Code Online (Sandbox Code Playgroud)
然后,我从使用创建的网络中识别出每个容器的IP地址
docker network inspect mynetwork1
docker network inspect mynetwork2
Run Code Online (Sandbox Code Playgroud)
使用那些我能够在同一网络中的容器之间进行通信,但我无法通过网络在容器之间进行通信.只有将容器添加到同一网络才能进行通信.
非常感谢...
我正在使用Docker for Mac Beta,它从聚光灯下运行.
有没有办法从控制台运行它或强制使用任何配置文件来指定docker host的ip地址.
现在它从192.168.64.3变为192.168.64.5(每个docker的启动它可以有任意随机IP)
可能我需要配置桥接接口?
com.docker.network.bridge.enable_ip_masquerade: true
com.docker.network.bridge.host_binding_ipv4: 0.0.0.0
Run Code Online (Sandbox Code Playgroud)
有谁知道这是怎么做到的吗?
我有
我有很多在Docker镜像中运行的JBoss实例(172.18.0.2是一个数据库):
应该同时运行.每个JBoss实例导出例如其8787,8080和8443端口.
我还创建了一个桥接网络:docker network create --driver bridge --subnet 172.18.0.0/24 bridged_network
目前,我已经设置了本地端口转发,以便主机可以使用前缀访问各种服务(例如,当访问实例1的端口8080时,主机使用localhost:28080进行连接).但这很容易出错.
现在,我想使用容器的IP从主机访问这些端口,例如调用172.18.0.4:8080(下一步:使用主机名:jboss-eap-arquillian:8080).虽然这在容器之间顺利运行,但我无法将其设置为从主机连接.
有Windows网络接口(类型:DockerNAT),IP 10.0.75.1,但我可能手动创建它(不确定......现在已经尝试了很长时间).但是当将容器的端口绑定到此设备时,这很有用,例如docker run ... -p 10.0.75.1:8080:8080.然后我可以使用10.0.75.1:8080调用该服务,但这对第二个容器没有帮助.
我也试过使用Docker的主机网络设备,但是那个.似乎只适用于一台机器b.我无法静态设置IP,这是运行静态配置的JUnit测试所需的.注意:我不能依赖网络DHCP在启动时分配IP,因为我经常更改我的网络(以及DHCP),导致再次出现不固定的IP.
所以基本上我正在寻找一种以这种方式设置网络/容器的方法,我可以使用容器IP(例如172.18.0.3,例如1)调用容器提供的服务(例如,在端口8080上)来自主机使用172.18.0.3:8080.
在我的电脑中,我可以创建更多的最大值 29 Docker Network,就像那样。
for num in `seq -w 100`; do
echo "Create network: $num"
docker network create $num
done
Run Code Online (Sandbox Code Playgroud)
创建 29 后Docker Network,出现错误:
Error response from daemon: failed to parse pool request for address space "LocalDefault" pool "" subpool "": could not find an available predefined netw
ork
Run Code Online (Sandbox Code Playgroud)
我的问题:如何在一台服务器上增加最大 Docker 网络?
因为我以前测试过很多docker-compose应该需要更多的网络。
谢谢你。
当我尝试使用docker-compose部署我的应用程序时,我收到了以下错误:
Creating network "<myapplicationnamehere_mycustomnetwork>" with the
default driver
could not find an available, non-overlapping IPv4 address pool among
the defaults to assign to the network
Run Code Online (Sandbox Code Playgroud)
现在我在这里和那里研究了一下,人们建议修剪未使用的旧码头网络docker network prune.但是因为我运行了34个docker容器(我认为大约有30个网络),所以它只会在错误再次出现之前修剪一个或两个旧网络.
我的问题是:如何在不遇到docker网络分配问题的情况下确保运行多项服务.(也许以某种方式创建更小的子网?)
我的Docker-compose文件的顶级网络部分如下所示:
#
# Networks section
# Networks:
# - public, represents the network between nginx and the public nginx-proxy (which should be already running)
# - uwsgi, represents the network between nginx and uwsgi
# - postgres, represents the network between uwsgi and postgres
#
networks:
uwsgi:
postgres:
public: …Run Code Online (Sandbox Code Playgroud) networking docker docker-compose docker-networking docker-network
应用程序上下文是一个带有 mongo db 的 node js 应用程序,使用 keycloak 服务器进行具有开放 ID 的授权。对于开发环境,我们有一个 mongo 容器、一个 keycloak 容器和应用服务器容器。
Keycloak 容器在 8080 上有一个端口映射,以便我可以访问http://localhost:8080.
应用程序容器在 9000 上有一个端口映射来访问应用程序本身 http://localhost:9000。
所有 3 个容器都在一个 docker 网络中application_default(从 docker compose 开始)。
在应用程序内部,使用 keycloak 进行 openid 身份验证所需的信息由以下环境变量管理:
# KEYCLOAK CREDENTIALS
APP_KEYCLOAK_REALM="http://localhost:8080/auth/realms/myrealm"
APP_KEYCLOAK_RETURN_URL="http://localhost:9000/api/auth/openid/return"
APP_KEYCLOAK_CLIENT_ID=myapplication
APP_KEYCLOAK_CLIENT_SECRET="00d5c908-eade-4e26-bcf0-b9341ghie197"
Run Code Online (Sandbox Code Playgroud)
这些设置不起作用,通常实际上就像在应用程序容器内部一样, 的APP_KEYCLOAK_REALM值localhost:8080不是指我的 PC(和 keycloak),而是指应用程序容器。
现在当我替换为
APP_KEYCLOAK_REALM="http://keycloak:8080/auth/realms/myrealm"
Run Code Online (Sandbox Code Playgroud)
该应用程序可以转到 keycloak,但是为了进行身份验证,我的浏览器被卡住了,试图将我重定向到一个对他来说没有任何意义的 url 开始 http://keycloak:8080/auth/realms...
我设法使配置正常工作的唯一方法是将我的 PC 的实际 IP 地址放在环境文件中:
# KEYCLOAK CREDENTIALS
APP_KEYCLOAK_REALM="http://192.168.1.34:8080/auth/realms/myrealm"
APP_KEYCLOAK_RETURN_URL="http://192.168.1.34:9000/api/auth/openid/return"
APP_KEYCLOAK_CLIENT_ID=myapplication
APP_KEYCLOAK_CLIENT_SECRET="00d5c908-eade-4e26-bcf0-b9341ghie197"
Run Code Online (Sandbox Code Playgroud)
这有效,但似乎不是可移植性的理想选择(IP 地址一直在变化)。
有没有标准的方法来做到这一点?可以将 docker dns …
我的 docker compose 文件中有以下网络配置。
networks:
default:
ipam:
driver: default
config:
- subnet: ${DOCKER_SUBNET}
Run Code Online (Sandbox Code Playgroud)
当DOCKER_SUBNET被设置时,如预期可以用来在变量中指定的子网。当变量未设置时,我得到:ERROR: Invalid subnet : invalid CIDR address:因为变量是空白的(这是完全合理的)。
有没有办法配置 ipam 驱动程序,以便在DOCKER_SUBNET未设置变量时,docker -compose 将选择一个可用的子网,就像未提供 ipam 配置时通常会做的那样?
environment-variables docker docker-compose docker-networking
我正在使用 Docker 18.03.1-ce,如果我创建一个容器,将其删除然后重新创建它,内部 DNS 会保留旧地址(除了新地址)。
有没有办法清除或刷新旧条目?如果我删除并重新创建网络,那么它会刷新它,但我不想每次都这样做。
我创建网络:
docker network create -d overlay --attachable --subnet 10.0.0.0/24 --gateway 10.0.0.1 --scope swarm -o parent=ens224 overlay1
Run Code Online (Sandbox Code Playgroud)
然后创建一个容器(本例中为 SQL)
docker container run -d --rm --network overlay1 --name sql -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Some_SA_Passw0rd' -p 1433:1433 microsoft/mssql-server-linux
Run Code Online (Sandbox Code Playgroud)
如果我在同一个网络上创建一个 Alpine 容器,我可以nslookup sql按名称并解析为10.0.0.6. 没有问题,到目前为止一切都很好。
现在,如果我删除 SQL 容器并重新创建它,则会nslookup sql显示10.0.0.6和10.0.0.8. 该10.0.0.6是原来的地址,不再活着,但仍做出决议。
我的容器使用的名称服务器127.0.0.11是用户创建的网络的典型名称,但我找不到任何可以让我清除其缓存的内容。
也许我遗漏了一些东西,但我认为只要容器被移除,DNS 条目就会被拆除。
任何见解当然值得赞赏!
我正在尝试从主机运行一个四节点群集,我的计算机是管理器,并将三个Hyper-V VM作为工作程序节点。我试图在所有节点hnsCall failed in Win32: An adapter was not found上将静态网页作为服务运行,但是始终在主机和No such image虚拟机上接收错误(尝试从私有注册表中提取服务映像)。在部署堆栈或使用时会发生这种情况service create。但是,我可以通过容器实例运行静态页面,并且可以正常工作。
我按照本指南设置和创建了我的VM,我怀疑这是我的问题所在。我通过HyperV虚拟交换机管理器创建的虚拟交换机(名为thevswitch)既在外部,又在正确的适配器上设置。我初始化用我的主机的IPv4下一个群thevswitch为--advertise-addr标志,并成功加入了虚拟机的工作节点到这个IP,同时使用驱动程序。无论如何,Docker似乎都看不到我创建的虚拟交换机。
PS C:\Docker\swarm-test> docker version
Client: Docker Engine - Community
Version: 18.09.2
API version: 1.39
Go version: go1.10.8
Git commit: 6247962
Built: Sun Feb 10 04:12:31 2019
OS/Arch: windows/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.2
API version: 1.39 (minimum version 1.24)
Go version: go1.10.6
Git commit: 6247962
Built: Sun …Run Code Online (Sandbox Code Playgroud) docker docker-swarm docker-machine docker-networking docker-for-windows
所以我有:
version: "3.6"
services:
nginx:
image: nginx
app:
image: node:latest
Run Code Online (Sandbox Code Playgroud)
我的 nginx 配置是:
upstream project_app {
server app:4000;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://project_app;
}
Run Code Online (Sandbox Code Playgroud)
为了在不停机的情况下更新容器(滚动更新),我首先将app服务升级到 2:
docker-compose up -d --no-deps --scale app=2 --no-recreate app
Run Code Online (Sandbox Code Playgroud)
它将project_app_1沿着project_app.
但是在这一步,即使新project_app_1容器准备好了,所有的流量也会流向project_app,前一个容器。
要同时使用它们,我需要运行docker-compose restart nginx.
现在,流量是到project_app和 的路由器project_app_1,这真的很酷。
我现在准备杀死现在已经project_app过时的。
我的问题是:
project_app_1或者它有点自动?http://app:4000是因为 DNS 主机名配置,对吗?在哪里可以了解更多信息?docker ×10
networking ×2
containers ×1
docker-swarm ×1
jboss ×1
keycloak ×1
macos ×1
nginx ×1
windows ×1