我正在使用"docker network create --d bridge mynet"创建一个docker网络.我想获得与此docker网络关联的网桥名称.
我知道我可以使用"-o"来提供桥名.例如:"docker network create --d bridge -o com.docker.network.bridge.name = mybridge mynet".这种方法适用于普通的桥驱动程序,但在我的情况下,我使用ovs驱动程序因此我启动网络作为"docker network create --d ovs mynet".如果我在ovs驱动程序的情况下使用"-o"它不起作用.
请建议我一种方法来获得与网络相关联的桥名称.在创建网络时创建的新桥,使用它创建的桥具有随机名称,我可以使用"ifconfig"命令查看它.
我有这样的docker-compose.yml(这里不是完整列表):
version: '2'
services:
nginx:
build: ./nginx/
ports:
- 8080:80
links:
- php
volumes_from:
- app
networks:
app_subnet:
ipv4_address: 172.16.1.3
php:
build: ./php/
expose:
- 9000
volumes_from:
- app
networks:
app_subnet:
ipv4_address: 172.16.1.4
networks:
app_subnet:
driver: bridge
ipam:
config:
- subnet: 172.16.1.0/24
gateway: 172.16.1.1
Run Code Online (Sandbox Code Playgroud)
之后docker-compose up我得到了这样的错误:
仅当连接到具有用户配置子网的网络时,才支持用户指定的IP地址
所以我正在创建子网 docker network create --gateway 172.16.1.1 --subnet 172.16.1.0/24 app_subnet
但这并不能解决问题,因为docker-compose会动态创建名为dev_app_subnet的子网.并且我的子网没有使用 - 我收到同样的错误.这样做的主要目的是为nginx服务分配静态IP - 从etc/hosts文件打开我的项目web url.
我有docker网络"my_network".我想删除这个docker网络docker network rm my_network.在此之前,我应该断开我的所有容器与此网络.我可以使用docker network inspect并获得输出
[
{
"Name": "my_network",
"Id": "aaaaaa",
"Scope": "some_value",
"Driver": "another_value",
"EnableIPv6": bool_value,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "10.0.0.0/1"
}
]
},
"Internal": false,
"Containers": {
"bbb": {
"Name": "my_container_1",
"EndpointID": "ENDPOITID1",
"MacAddress": "MacAddress1",
"IPv4Address": "0.0.0.0/1",
"IPv6Address": ""
},
"ccc": {
"Name": "my_container_2",
"EndpointID": "ENDPOINTID2",
"MacAddress": "MacAddress2",
"IPv4Address": "0.0.0.0/2",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
Run Code Online (Sandbox Code Playgroud)
如果我只有几个容器可以手动断开,但如果我有50个容器我有问题.如何使用单个或多个命令断开此网络中的所有容器?
我正在尝试配置docker-compose默认使用不同的网络范围,所以我按照https://github.com/moby/moby/pull/29376的说明进行操作
但是,我收到以下错误:
无法使用文件/etc/docker/daemon.json配置Docker doker守护程序:以下指令与任何配置选项都不匹配:default-address-pools
这是daemon.json的内容 - 它是取自#29376的样本.
{
"default-address-pools": [
{
"scope": "local",
"base": "172.80.0.0/16",
"size": 24
},
{
"scope": "global",
"base": "172.90.0.0/16",
"size": 24
}
]
}
Run Code Online (Sandbox Code Playgroud)
请指教.
我的环境:
# uname -a
Linux gfn-classroom 4.4.0-109-generic #132-Ubuntu SMP Tue Jan 9 19:52:39 UTC
2018 x86_64 x86_64 x86_64 GNU/Linux
# docker --version
Docker version 17.12.0-ce, build c97c6d6
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial
Run Code Online (Sandbox Code Playgroud) 我在以下位置启动了 Prometheus 服务器localhost:57475/metrics:
使用以下 Go 代码:
package main
import (
"net/http"
"contrib.go.opencensus.io/exporter/prometheus"
log "github.com/sirupsen/logrus"
"go.opencensus.io/plugin/ochttp"
"go.opencensus.io/stats/view"
)
func main() {
stop := make(chan struct{})
server := &http.Server{Addr: ":8080"}
statsMux := http.NewServeMux()
statsServer := &http.Server{Handler: statsMux, Addr: ":57475"}
if err := view.Register(ochttp.DefaultServerViews...); err != nil {
log.WithError(err).Fatal("register HTTP metrics view")
}
exporter, err := prometheus.NewExporter(prometheus.Options{
Namespace: "default",
})
if err != nil {
log.WithError(err).Fatal("create Prometheus exporter")
}
view.RegisterExporter(exporter)
statsMux.Handle("/metrics", exporter)
originalHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, World!")) …Run Code Online (Sandbox Code Playgroud) 我正在做一个项目,需要我在我的主机上创建一个虚拟 CAN 网络
$ sudo modprobe vcan
$ sudo ip link add dev vcan0 type vcan
$ sudo ip link set up vcan0
Run Code Online (Sandbox Code Playgroud)
我的 ifconfig :
我的问题是如何与我的 docker 容器共享这个接口。
如果它有任何用处,我find / -name "vcan0" -print 2>/dev/null在我的主机上运行以下命令:
/sys/class/net/vcan0
/sys/devices/virtual/net/vcan0
/proc/sys/net/ipv4/conf/vcan0
/proc/sys/net/ipv4/neigh/vcan0
Run Code Online (Sandbox Code Playgroud)
我可以使用docker run --rm -it --network=host ... . 唯一的问题是没有网络隔离 b/w docker 主机和容器了。有没有办法在不共享主机网络的情况下实现上述目标?
当我运行时docker-compose up -d,docker 总是创建容器名称和网络名称,并以包含docker-compose.yml文件的文件夹名称为前缀。
我可以指定容器名称如下:
nginx:
container_name: nginx
build:
context: .
dockerfile: .docker/docker-nginx.dockerfile
Run Code Online (Sandbox Code Playgroud)
但是如何指定网络名称,以便它不会在其前面添加文件夹名称?
谢谢。
似乎 docker 服务发现仅适用于用户定义的网络,而不适用于默认网桥(docker0),但我在文档中没有找到任何内容。
docker run --rm -d --name c1 alpine sleep 2h
docker run --rm -d --name c2 alpine sleep 2h
docker exec -ti c1 ping c2
它给了我 ping: bad address 'c2'
但是如果我创建一个自定义桥接网络一切正常:
docker network create u-bridge
docker run --rm -d --name u1 --net u-bridge alpine sleep 2h
docker run --rm -d --name u2 --net u-bridge alpine sleep 2h
docker exec -ti u1 ping u2
它给了我: PING u2 (172.18.0.3): 56 data bytes (...)
默认桥接网络不应该有服务发现吗?
命令docker create network mynetwork给了我以下错误响应:
Error response from daemon: 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没什么区别。这是有关我的服务器环境的一些信息。操作系统:
LSB Version: :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.3 (Final)
Release: 6.3
Codename: Final
Run Code Online (Sandbox Code Playgroud)
核心:
Linux xxx.com 3.10.0_3-0-0-17 #181 SMP Thu Feb 8 16:34:08 CST 2018 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
码头工人:
Client:
Version: 18.03.0-ce
API version: 1.37
Go …Run Code Online (Sandbox Code Playgroud) 我已经在 AWS 上设置了一个 EC2 实例。
已正确设置我的安全组,以便实例能够访问 Internet,例如
ubuntu@ip-10-17-0-78:/data$ ping www.google.com
PING www.google.com (216.58.211.164) 56(84) bytes of data.
64 bytes from dub08s01-in-f4.1e100.net (216.58.211.164): icmp_seq=1 ttl=46 time=1.02 ms
64 bytes from dub08s01-in-f4.1e100.net (216.58.211.164): icmp_seq=2 ttl=46 time=1.00 ms
Run Code Online (Sandbox Code Playgroud)
但是,当我执行容器时,这是不可能的:
root@d1ca5ce50d3b:/app# ping www.google.com
ping: www.google.com: Temporary failure in name resolution
Run Code Online (Sandbox Code Playgroud)
update_1:连接问题与docker stack deploy在特定堆栈中使用,启动的容器有关;
当我刚启动一个独立的容器时,就可以连接到 Internet:
ubuntu@ip-10-17-0-78:/data$ docker run -it alpine:latest /bin/ash
/ # ping www.google.gr
PING www.google.gr (209.85.203.94): 56 data bytes
64 bytes from 209.85.203.94: seq=0 ttl=38 time=1.148 ms
64 bytes …Run Code Online (Sandbox Code Playgroud) docker ×9
bash ×1
can-bus ×1
devops ×1
go ×1
grafana ×1
linux ×1
networking ×1
prometheus ×1
python-can ×1