问题标签 [docker-networking]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
docker - Docker 网络:无法在多主机网络上按名称寻址容器
我有 3 台主机正在运行,有一个 swarm 集群,上面有一个使用 docker 1.11 的覆盖网络
机器使用 boot2docker 和 virtualbox 启动:
网络是这样创建的:
然后使用 compose 完成容器的部署:
当我 ssh 到 af-repo 并在报告容器上执行 /bin/bash 时,我可以 ping docker_registry 容器,它位于同一主机上:
但是当我尝试 ping 另一个主机上的 jenkins 容器时:
当我检查它时,网络似乎是正确的:
从 af-jenkins 执行此操作时,输出是相同的。因此,据我了解,我的网络根本无法正常工作,因为我从同一主机上的另一个容器 ping 容器的能力来自为这些容器自动创建的桥接网络。
非常感谢任何帮助:)
编辑:这是集群信息输出
docker - 如何创建 docker 受限网络
我正在尝试在受限网络环境(一个开放到互联网的端口)中运行 docker 容器。我读到我可以在主机系统上添加一些 iptables 规则,但我不想影响其他容器。所以我创建了另一个桥“docker1”来放置 iptables 规则。但我不能将它用作 docker 中的桥梁:
我尝试了--bridge,改变了地方和东西,没有任何效果,但我在互联网上看到了这种用法。我做错了什么以及如何解决它?如何为一组容器创建一个只有一个端口 NAT 到 Internet 的网络,而不是所有容器?
提前致谢!
nginx - docker容器IP在重启时会改变吗?
我是 docker 新手,我一直在将我的所有应用程序 docker 化到一个服务器中。到目前为止,一切都很好并且工作正常。但是,我不明白一件事。我对所有东西都使用了 docker-compose(我还没有为我的项目创建 dockerfile),并且 docker ports
-compose 中有这个属性。如果我写这样的东西:
它将监听 0.0.0.0:8085,这意味着外部世界可以访问我的服务器。经过一番讨论和google-ing,我发现我可以在我的docker bridge网络中获取一个IP地址并轻松进行端口映射:
这只会在 172.17.0.1:8085 上侦听,这很棒,因为它只在内部侦听,而我的 nginx 将流量代理到必要的端口。(例如proxy_pass http://172.17.0.1:8085
)。在对 docker 有了更多了解并了解了它们的工作原理后,我意识到所有这些容器都有自己的 IP 地址,并且端口只暴露给这些地址。例如,我的一个“网络”容器的 IPv4 地址为 172.17.0.10,并且端口 80 已公开。如果我docker inspect
在其中一个容器上执行此操作,我将看到容器的 IP 地址。
现在,我想在我的 nginx 中使用这些 IP 地址。而不是proxy_pass http://172.17.0.1:8085
,我想做http://172.17.0.10
。我个人认为这是一个非常优雅的界面,但有一件事让我担心。如果我重新启动机器会发生什么?所有容器将以某种顺序启动。如果我有 5 个 Web 容器并且它们以随机顺序启动,我可以确定这些容器的 IP 相同吗?或者他们会改变吗?我应该总是ports
在 docker-compose 中使用 nginx 使用吗?如果是,我怎样才能为每个容器设置不同的 IP,而不是使用相同 IP 的不同端口?如果我创建另一个 docker 网络接口(假设在子网 172.17.1.0 中),并将该接口的不同 IP 分配给暴露的“公共”端口,是否可以?我的意思是基本上172.17.1.1:80:80
在一个容器中使用,172.17.1.2:80:80
在另一个等
docker - 无需停机即可在 swarm 集群中更新 docker 网络
Out 网络在 compose 文件中使用默认设置定义,一段时间后我们意识到它创建了具有子网 10.0.2.0/24 的覆盖网络。最终,我们开始用完 IP。
现在我们想将子网更改为 /20 之类的东西。我想我们需要创建新网络并将其附加到每个容器,但这需要重新创建每个容器,这会导致停机。
有没有其他方法可以做到这一点?
java - Mac 主机不喜欢 Docker 容器端口转发
我第一次尝试使用 Docker,并试图让 Spring Boot Web 应用程序在 Docker 容器中运行。我正在构建应用程序(将其打包到一个独立的 jar 中),然后将其添加到 Docker 映像中(这是我想要的)。
你可以在 GitHub 上的这个Bootup repo中找到我的SSCCE,其 README 包含重现我所看到内容的所有说明。但基本上:
- 我将网络应用程序构建到一个 jar 中
- 运行
docker build -t bootup .
成功 - 运行
docker run -it -p 9200:9200 -d --name bootup bootup
,然后容器似乎启动得很好,docker ps
下面的输出证明了这一点 - 但是,当我将浏览器指向 时
http://localhost:9200
,我什么也得不到
docker ps
输出:
Web 应用程序配置为在端口 9200 上运行,而不是Java 默认的 8080 端口。您可以通过在 docker 外部运行应用程序(因此,仅在主机上本地)运行./gradlew clean build && java -jar build/libs/bootup.jar
.
据我所知,我的主机上没有运行会阻塞端口的防火墙(我在 Mac 10.11.5 上并验证已System Preferences >> Security & Privacy >> Firewall
关闭)。
谁能发现我哪里出错了?
更新:
我在主机上运行了curl
,netstat
和:lsof
然后docker exec
'd进入容器并运行另一个netstat
:
更新照片:
我的浏览器(Chrome)的图片指向http://localhost:9200
:
源代码图片位于http://localhost:9200
:
Chrome 开发者工具检查页面的图片http://localhost:9200
:
Network
Chrome 开发者工具中的选项卡图片:
这到底是怎么回事?!?!?根据消息来源,浏览器应该正在渲染我的Well hello there,来自 Dockerland!留言就好了。根据实际浏览器页面,好像是网络错误。根据 Chrome 开发者工具,我的应用程序正在返回各种 HTML/CSS/JS 内容,这些内容甚至不属于我的应用程序(查看源代码,自己看看)!!!
postgresql - 仅将 docker 上的 PostgreSQL 持久存储转换为现代 docker 存储
随着的到来
对于仅存储容器,我仍在使用旧方法在我的机器上运行 postgres,用于没有 dockerfile 的小型应用程序:
我有4个问题:
- 如何将旧的方式将数据存储在本地持久容器中转移到现代卷?
- 我的权限似乎总是很奇怪:
我应该以不同的方式做这件事吗?
$ ls -lah $STORAGE_DIR/.. drwx------ 19 999 root 4.0K Aug 28 10:04 pgdata
- 我的网络在这里看起来正确吗?这将仅在托管 docker 的机器上可见,或者这是否也发布到我的 wifi 网络上的所有机器上?
- 除了弱密码、标准端口、默认用户名(例如这里)之外,是否还有其他我应该知道的仅供个人使用的安全担忧?
docker - Docker 容器中的网络性能缓慢
我正在 OSX Yosemite 和 VirtualBox 上运行最新的 docker/docker-machine,我正在尝试从主机连接到在容器中运行的 lein ring 服务器,加载速度很慢,就像加载时间超过 1 分钟一样是我的配置
Docker 1.12.0 Docker 机器 0.8.0 VirtualBox 5.0.24
我的 Docker 机器
"ConfigVersion": 3, "Driver": { "IPAddress": "192.168.99.100", "MachineName": "default", "SSHUser": "docker", "SSHPort": 49478, "SSHKeyPath": "/Volumes /NASMAC/VMs/.docker/machine/machines/default/id_rsa”,“StorePath”:“/Volumes/NASMAC/VMs/.docker/machine”,“SwarmMaster”:假,“SwarmHost”:“tcp:// 0.0.0.0:3376”、“SwarmDiscovery”:“”、“VBoxManager”:{}、“HostInterfaces”:{}、“CPU”:1、“内存”:1024、“DiskSize”:20000、“NatNicType”: “82540EM”、“Boot2DockerURL”:“”、“Boot2DockerImportVM”:“”、“HostDNSResolver”:假、“HostOnlyCIDR”:“192.168.99.1/24”,“HostOnlyNicType”:“82540EM”,“HostOnlyPromiscMode”:“deny”,“UIType”:“headless”,“NoShare”:false,“DNSProxy”:true,“NoVTXCheck” :假},“DriverName”:“virtualbox”,“HostOptions”:{“Driver”:“”,“内存”:0,“磁盘”:0,“EngineOptions”:{“ArbitraryFlags”:[],“Dns “:空,“GraphDir”:“”,“Env”:[],“Ipv6”:假,“InsecureRegistry”:[],“标签”:[],“LogLevel”:“”,“StorageDriver”:“ ", "SelinuxEnabled": false, "TlsVerify": true, "RegistryMirror": [], "安装网址":"https://get.docker.com" }, "SwarmOptions": { "IsSwarm": false, "Address": "", "Discovery": "", "Agent": false, "Master": false, "Host": "tcp://0.0 .0.0:3376", "Image": "swarm:latest", "Strategy": "spread", "Heartbeat": 0, "Overcommit": 0, "ArbitraryFlags": [], "ArbitraryJoinFlags": [], "Env": null, "IsExperimental": false }, "AuthOptions": { "CertDir": "/Volumes/NASMAC/VMs/.docker/machine/certs", "CaCertPath": "/Volumes/NASMAC/VMs/ .docker/machine/certs/ca.pem", "CaPrivateKeyPath": "/Volumes/NASMAC/VMs/.docker/machine/certs/ca-key.pem", "CaCertRemotePath": "",“ServerCertPath”:“/Volumes/NASMAC/VMs/.docker/machine/machines/default/server.pem”,“ServerKeyPath”:“/Volumes/NASMAC/VMs/.docker/machine/machines/default/server-key .pem”、“ClientKeyPath”:“/Volumes/NASMAC/VMs/.docker/machine/certs/key.pem”、“ServerCertRemotePath”:“”、“ServerKeyRemotePath”:“”、“ClientCertPath”:“/Volumes/ NASMAC/VMs/.docker/machine/certs/cert.pem", "ServerCertSANs": [], "StorePath": "/Volumes/NASMAC/VMs/.docker/machine/machines/default" } }, "名称" : “默认” }docker/machine/machines/default/server-key.pem”、“ClientKeyPath”:“/Volumes/NASMAC/VMs/.docker/machine/certs/key.pem”、“ServerCertRemotePath”:“”、“ServerKeyRemotePath”: "", "ClientCertPath": "/Volumes/NASMAC/VMs/.docker/machine/certs/cert.pem", "ServerCertSANs": [], "StorePath": "/Volumes/NASMAC/VMs/.docker/machine /machines/default" } }, "名称": "default" }docker/machine/machines/default/server-key.pem”、“ClientKeyPath”:“/Volumes/NASMAC/VMs/.docker/machine/certs/key.pem”、“ServerCertRemotePath”:“”、“ServerKeyRemotePath”: "", "ClientCertPath": "/Volumes/NASMAC/VMs/.docker/machine/certs/cert.pem", "ServerCertSANs": [], "StorePath": "/Volumes/NASMAC/VMs/.docker/machine /machines/default" } }, "名称": "default" }“StorePath”:“/Volumes/NASMAC/VMs/.docker/machine/machines/default”}},“名称”:“default”}“StorePath”:“/Volumes/NASMAC/VMs/.docker/machine/machines/default”}},“名称”:“default”}
我的码头工人形象
{ “Id”:“819132073e36a026222ad0da90899a0daf1e735ce0f8623202740b355556c136”,“已创建”:“2016-08-28T23:35:03.957961657Z”,“路径”:“/bin/bash”,“带配置文件”:[“le ", "dev", "do", "start-dev" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled “:假,“死”:假,“Pid”:3586,“退出代码”:0,“错误”:“”,“StartedAt”:“2016-08-28T23:35:04.365339872Z”,“FinishedAt”: “0001-01-01T00:00:00Z”},“图像”:“sha256:618b57a0e5d07030a3f869607928f5e167b53a6f250f76f88325799888dcac94”,"ResolvConfPath": "/var/lib/docker/containers/819132073e36a026222ad0da90899a0daf1e735ce0f8623202740b355556c136/resolv.conf", "HostnamePath": "/var/lib/docker/containers/819132073e36a026222ad0da90899a0daf1e735ce0f8623202740b355556c136/hostname", "HostsPath": "/var/lib/ docker/containers/819132073e36a026222ad0da90899a0daf1e735ce0f8623202740b355556c136/hosts", "LogPath": "/var/lib/docker/containers/819132073e36a026222ad0da90899a0daf1e735ce0f8623202740b355556c136/819132073e36a026222ad0da90899a0daf1e735ce0f8623202740b355556c136-json.log", "Name": "/lonely_ritchie", "RestartCount": 0, "Driver" :“aufs”、“MountLabel”:“”、“ProcessLabel”:“”、“AppArmorProfile”:"", "ExecIDs": null, "HostConfig": { "Binds": ["/Users/kendallarneaud/Documents/Git/ngc-race-along.docker:/data"], "ContainerIDFile": "", " LogConfig": { "Type": "json-file", "Config": {} }, "NetworkMode": "default", "PortBindings": { "3000/tcp": [ { "HostIp": "", "HostPort": "" } ], "9000/tcp": [ { "HostIp": "", "HostPort": "" } ] }, "RestartPolicy": { "Name": "no", "MaximumRetryCount" :0},“自动删除”:假,“VolumeDriver”:“”,“VolumesFrom”:空,“CapAdd”:空,“CapDrop”:空,“Dns”:[],“DnsOptions”:[],“DnsSearch”:[],“ExtraHosts”:null,“GroupAdd”:null,“IpcMode”:“”,“Cgroup”:“”,“Links”:空,“OomScoreAdj”:0,“PidMode”:“”,“Privileged”:假,“PublishAllPorts”:真,“ReadonlyRootfs”:假,“SecurityOpt”:空,“UTSMode”:“”,“UsernsMode”: “”,“ShmSize”:67108864,“运行时”:“runc”,“ConsoleSize”:[0, 0],“隔离”:“”,“CpuShares”:0,“内存”:0,“CgroupParent”: “”,“BlkioWeight”:0,“BlkioWeightDevice”:空,“BlkioDeviceReadBps”:空,“BlkioDeviceWriteBps”:空,“BlkioDeviceReadIOps”:空,“BlkioDeviceWriteIOps”:空,“CpuPeriod”:0,“CpuQuota”:0,“CpusetCpus”:“”,“CpusetMems”:“”,“设备”:[], “DiskQuota”:0,“KernelMemory”:0,“MemoryReservation”:0,“MemorySwap”:0,“MemorySwappiness”:-1,“OomKillDisable”:false,“PidsLimit”:0,“Ulimits”:null,“ CpuCount”:0,“CpuPercent”:0,“IOMaximumIOps”:0,“IOMaximumBandwidth”:0 },“GraphDriver”:{“名称”:“aufs”,“数据”:null},“Mounts”:[{ “来源”:“/Users/kendallarneaud/Documents/Git/ngc-race-along.docker”,“目标”:“/data”,“模式”:“”,“RW”:true,“传播”:“rprivate”}],“配置”:{“主机名”:“819132073e36”,“域名”:“” , "User": "", "AttachStdin": true, "AttachStdout": true, "AttachStderr": true, "ExposedPorts": { "3000/tcp": {}, "9000/tcp": {} }, “Tty”:真,“OpenStdin”:真,“StdinOnce”:真,“Env”:[“no_proxy=*.local, 169.254/16”,“PATH=/usr/local/sbin:/usr/local/ bin:/usr/sbin:/usr/bin:/sbin:/bin"、"HOME=/root"、"JAVA_HOME=/usr/lib/jvm/java-7-oracle"、"LEIN_ROOT=true"、" LANG=C.UTF-8", "PYTHON_VERSION=2.7.9" ],“Cmd”:[“/bin/bash”,“lein”,“with-profile”,“dev”,“do”,“start-dev”],“图像”:“rand/docker-clojurescript:latest” , "Volumes": null, "WorkingDir": "/data", "Entrypoint": null, "OnBuild": null, "Labels": {} }, "NetworkSettings": { "Bridge": "", "SandboxID “:“8b5479b9b22a6d653509c99f9b291593ca7664339666cf40bee55044f3c1d778”,“HairpinMode”:假,“LinkLocalIPv6Address”:“”,“LinkLocalIPv6PrefixLen”:0,“端口”:{“3000/tcp”:[{“HostIp.Port”:“0. ": "32773" } ], "9000/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "32772" } ] }, "SandboxKey": "/var/run/docker/netns/8b5479b9b22a", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "d4164a411f5ca1992eb724c4cd5cb2f013a1ebd909df46d" ,“网关”:“172.17.0.1”,“GlobalIPv6Address”:“”,“GlobalIPv6PrefixLen”:0,“IPAddress”:“172.17.0.2”,“IPPrefixLen”:16,“IPv6Gateway”:“”,“MacAddress” :“02:42:ac:11:00:02”,“网络”:{“桥”:{“IPAMConfig”:null,“链接”:null,“别名”:null,“NetworkID”:“fb82d366a9a2ad010bda7cdf4e6cb33f083a678756cfdfed01f90d3d2c317dfa” ,“EndpointID”:“d4164a411f5ca1992eb724c4cd5cb2f013a1eb909b6d3e5f395d07df84ff34f2”,“网关”:“172.17.0.1”,“IPAddress”:“172.17.0.2”,“IPPrefixLen”:16,“IPv6PrefixLen”:“全球IPv6PrefixLen:”“全球IPv6PrefixLen:” ": 0, "MacAddress": "02:42:ac:11:00:02" } } } }
我不确定我要提交哪些其他信息来调试这种情况。有什么办法可以提高性能吗?
docker - Docker 容器网络
随着 docker 1.9 的发布,容器网络出现了。我了解如何使用它们,但我不确定为什么要使用它们。使用容器网络有什么好处?
docker - 我的主机上的 iptables 443 重定向如何干扰来自我的 Docker 容器的出站 HTTPS 请求?
我最近诊断出一个涉及 Docker 和iptables
.
我有一个具有以下iptables
设置的 Ubuntu 主机:
该规则用于将所有入站流量从端口 443 重定向到 8443。它旨在将流量重定向到基于 Java 的应用程序,该应用程序与我的 Docker 容器无关,但在同一台机器上运行,并且具有自签署的 SSL 证书。
当我使用 Docker 的默认网络设置在同一台机器上运行 Docker 容器并从容器内发出 wget HTTPS 请求时,Docker(或操作系统)似乎将出站连接重定向到 Ubuntu 主机上的端口 8443,并且,因此,本地基于 Java 的应用程序反过来接受连接(大部分时间)并返回无效(自签名)证书详细信息。结果,容器内的应用程序最终与主机上的本地 Java 应用程序进行通信,而不是与它们应该与之通信的 Internet 上的真实服务器进行通信。
我还验证了直接从 Ubuntu 主机发出的任何 wget HTTPS 请求都会命中 Internet 上的目标服务器。只有在同一主机上运行的 Docker 容器发起的请求才会出现此问题。
谁能解释为什么会这样?