我正在使用Docker for Mac.我有一个运行服务器的容器,例如我的服务器在端口5000上运行.我已经暴露了这个端口Dockerfile
当我的容器运行时,我连接到这个容器并通过运行以下命令检查此服务器是否正常工作,并看到它返回数据(一堆html和javascript)
wget -d localhost:5000
Run Code Online (Sandbox Code Playgroud)
注意,我启动此容器并通过命令在外部发布端口:
docker run -d -p 5000:5000 <docker_image_name>
Run Code Online (Sandbox Code Playgroud)
但是在docker主机(是我的mac并运行El Capitan),我打开chrome并转到地址localhost:5000.它不起作用.只是一点注意,如果我去任何任意端口,例如localhost:4000我看到来自chrome的错误消息,例如:
This site can’t be reached
localhost refused to connect.
Run Code Online (Sandbox Code Playgroud)
但错误信息localhost:5000是:
The localhost page isn’t working
localhost didn’t send any data.
Run Code Online (Sandbox Code Playgroud)
所以我似乎已经将工作配置为"一点点",但有些不对劲.请告诉我如何解决这个问题.
我创建了一个用户定义的网络(桥接模式)hb1,并添加了2个容器。但是,我无法从网络上的外部主机连接到它们。
pi@raspberrypi:~ $ docker network inspect hb1
[
{
"Name": "hb1",
"Id": "278a4ba8bb7a4a34b25b5f5fde9a965a807ff896d5e57c2b1d7d39af60d0a046",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.1.32/27",
"Gateway": "192.168.1.33"
}
]
},
"Internal": false,
"Containers": {
"7dc7be3ae45813450bb7f75a6e2c7b4d93e59aa147aa7d393061748b8201381a": {
"Name": "modest_bohr",
"EndpointID": "eda20bbb52319b10911f3da6f6afadbd2167298d5a9cfd5c91f933f4b6d5fe86",
"MacAddress": "02:42:c0:a8:01:22",
"IPv4Address": "192.168.1.34/27",
"IPv6Address": ""
},
"f12fbc30bcf5e37737bfe8c7868dcd40e6c632bb3672f5641ffd6960ede4f777": {
"Name": "infallible_torvalds",
"EndpointID": "92d0ecfad597485c25ad309d48c3c77b9368f25ebbd851b1168f59a795c497f2",
"MacAddress": "02:42:c0:a8:01:23",
"IPv4Address": "192.168.1.35/27",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
Run Code Online (Sandbox Code Playgroud)
当我从docker主机ping时,它按预期工作。
user@myhost: ~$ …Run Code Online (Sandbox Code Playgroud) 我尝试运行我的test_container_services.py套件,但遇到了这个问题:
docker.errors.APIError:500服务器错误:内部服务器错误("b'{"message":"无法分配网关(10.49.0.201):地址已在使用"}'")
我试图删除所有正在运行的容器和相关网络,但仍然遇到了问题.
核心
$ uname
Linux x1 4.8.0-36-generic #36~16.04.1-Ubuntu SMP Sun Feb 5 09:39:57 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
搬运工人
$ docker --version
Docker version 1.13.1, build 092cba3
Run Code Online (Sandbox Code Playgroud)
SDK
docker-py==1.10.6
Run Code Online (Sandbox Code Playgroud)
在运行测试之前,我处于这种状态:
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
a4beb5d4de56 bridge bridge local
8a1012b67f1a host host local
ed2452ee5e44 none null local
Run Code Online (Sandbox Code Playgroud)
没有集装箱运行$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
def test_get_network_config(self):
number_networks = len(self.docker_api.networks())
network_config = container_services.get_network_config(
data={ …Run Code Online (Sandbox Code Playgroud) 我在 docker 中有以下设置:
应用程序的 logdriver 的配置描述了 fluentd 容器。日志将保存在 ES 中并显示在 Kibana 中。
当 logdriver 配置为这样时,它可以工作:
web:
image: httpd
container_name: httpd
ports:
- "80:80"
links:
- fluentd
logging:
driver: "fluentd"
options:
fluentd-address: localhost:24224
tag: httpd.access
Run Code Online (Sandbox Code Playgroud)
fluentd 将其暴露的端口 24224 映射到主机的端口 24224 上。
fluentd:
build: ./fluentd
image: fluentd
container_name: fluentd
links:
- "elasticsearch"
ports:
- "24224:24224"
Run Code Online (Sandbox Code Playgroud)
但我不想在主机网络上暴露我的流利。我想让它在 docker 网络中保持“私有”(我只想在主机网络上映射应用程序和 kibana),如下所示:
fluentd:
build: ./fluentd
image: fluentd
container_name: fluentd
links:
- "elasticsearch"
Run Code Online (Sandbox Code Playgroud)
端口 24224 仍然公开(在 dockerfile 中),但它没有映射到主机网络上。现在我想更改我的应用程序的日志驱动程序的配置: logging: driver: "fluentd" …
我们已经成功创建了一个包含多个容器的Docker集群,可以说,总体而言,它工作正常。我们仍在开发产品的第一个版本,因此在产品环境中尚未部署任何产品。到目前为止,我们的配置非常简单(docker-compose.yml):一个网络,一个卷,6个服务,每个服务1个副本(打算在将来有更多副本),所有服务都是rest服务,只有1个节点(带有将来有更多节点的意图)。
我们注意到的唯一奇怪的事情是,让我们担心的是,在集群闲置了一段时间(例如,开发服务器上的任何容器上都没有传入请求)之后,我们在到达任何其他服务时都会经历高延迟仅在每次服务的第一个请求期间发生。因此,例如:
群:服务A,服务B
空闲30分钟->在30分钟内没有任何服务的传入请求
对服务A的传入请求(不可缓存请求)->(大约)20秒后响应
服务A的传入请求(不可缓存请求)->立即响应
...对服务A的进一步打击立即响应
到服务B的传入请求(不可缓存请求)->(大约)20秒后响应
服务B的传入请求(不可缓存请求)->立即响应
...对服务B的进一步打击会立即做出回应
我们进入了容器(执行bash),并注意到:
更多细节:
有人对这里可能发生的事情有任何想法吗?
docker docker-compose docker-swarm docker-networking docker-swarm-mode
看起来我需要一个网络,因为我想通过主机名从另一个容器引用一个容器。
我也可以使用--link但它已被弃用并且很快就会消失。这就是为什么我想知道 Testcontainers 是否可以为我创建一个 docker 网络。
使用命令行,我只需执行docker network create bridge2,然后我就可以像这样启动容器:
docker run -it --rm --net=bridge2 --name alpine1 alpine
docker run -it --rm --net=bridge2 --name alpine2 alpine
Run Code Online (Sandbox Code Playgroud)
并nslookup alpine2从alpine1容器中解析。
如果我尝试使用默认--net=bridge网络或跳过--net选项(实际上是相同的),则按名称引用将不起作用。
在我的Docker化应用程序中,我需要具有硬件锚点并考虑使用Container的Mac地址。但是:由于Docker容器的Mac地址是可变的,并且在容器启动时动态分配,因此我无法使用此Mac地址(请参阅Docker文档)
MAC地址是使用分配给容器的IP地址生成的,以避免ARP冲突,其使用范围是02:42:ac:11:00:00到02:42:ac:11:ff:ff
Docker主机的Mac地址将是一个可行的解决方案。
如何从在此主机上运行的容器内访问(linux)主机的Mac地址?
我是 Docker 新手,我正在尝试使用驱动程序桥创建网络
docker network create -d bridge DockerNet
Run Code Online (Sandbox Code Playgroud)
但我不断收到错误消息:来自守护进程的错误响应:找不到插件。
我也尝试使用
docker network create -d l2bridge DockerNet
Run Code Online (Sandbox Code Playgroud)
因为 docker info 中显示的插件名为l2bridge.
码头工人信息:
Containers: 4
Running: 0
Paused: 0
Stopped: 4
Images: 2
Server Version: 17.06.2-ee-14
Storage Driver: windowsfilter
Windows:
Logging Driver: json-file
Plugins:
Volume: local
Network: l2bridge l2tunnel nat null overlay transparent
Log: awslogs etwlogs fluentd json-file logentries splunk syslog
Swarm: inactive
Default Isolation: process
Kernel Version: 10.0 14393 (14393.2248.amd64fre.rs1_release.180427-1804)
Operating System: Windows Server 2016 Standard
OSType: windows …Run Code Online (Sandbox Code Playgroud) 我想配置一个网关来连接两个容器。下面是一个示例撰写文件,该文件创建了三个容器-一个test_client,一个test_server和一个代理。代理服务器应充当从test_client到test_server的所有通信的默认网关。我正在使用撰写文件格式v2,因为v3不支持IPAM网关配置。
version: "2"
services:
proxy:
build: .
cap_add:
- NET_ADMIN
expose:
- 8080
- 80
- 443
networks:
client_network:
ipv4_address: '192.168.0.5'
server_network: null
stdin_open: true
tty: true
test_server:
build: ./test_server
expose:
- 8000
networks:
- server_network
test_client:
build: ./test_client
networks:
- client_network
stdin_open: true
tty: true
networks:
client_network:
driver: bridge
ipam:
driver: default
config:
- subnet: "192.168.0.0/24"
gateway: "192.168.0.5"
server_network:
driver: bridge
Run Code Online (Sandbox Code Playgroud)
运行时docker-compose up,出现以下错误:
ERROR: for 28e458cec9ac_network_proxy_1 b'user specified IP address is supported only when connecting to networks …Run Code Online (Sandbox Code Playgroud) 我正在努力为Docker提供商提供静态IP分配.
config.vm.define "dockeragent" do |dockeragent|
dockeragent.vm.provider "docker" do |d|
d.build_dir = "../installers/docker/"
end
dockeragent.vm.network :private_network, ip: "172.16.1.3"
end
Run Code Online (Sandbox Code Playgroud)
我希望我的容器名为dockeragentuses,172.16.1.3但它总是使用172.16.1.1,我的问题是我想要多个容器,每个容器必须有自己的IP.
docker ×10
docker-swarm ×1
dockerfile ×1
dockerpy ×1
efk ×1
fluentd ×1
linux ×1
networking ×1
tdd ×1
vagrant ×1