[英]nodemon not restarting server on code change in docker container
[英]How to change docker container's source code without restarting it?
我有一个应用程序,我使用两个docker容器。 说容器A和B. 现在B依赖于A.所以当我启动容器'B'时,我确实在命令行中提到了容器'A'的ip地址。
现在我在容器'A'中进行了代码更改。 如果我必须在更改源代码后重新启动容器'A',那么在重新启动后,A的IP地址将会改变。 因此容器'B'将失去与'A'的连接,我必须用新的IP地址'A'重新启动'B'。
是否有任何码头工作方法,我可以保留容器'A'的IP地址? 或者我可以在不重新启动容器'A'的情况下更改代码吗? 请建议。
您需要像consul这样的服务发现,并与registrator结合使用,以便每次启动时记录A
(在领事中)。
那么B
可以为了得到查询领事A
上最新的IP地址。
请参阅“ 使用Registrator自动Docker服务公告 ”
如果您的容器不是由同一个docker守护程序管理(意味着您处于多主机多节点环境中),那么您将使用docker swarm (仍与consul
一起使用):
两种方式
您可以在容器内自定义Docker网络,远远超出Docker在命令行中允许的JérômePetazzoni pipework
。
它允许您设置您想要的网络,以便您可以创建桥接,让我们有创造力并将其称为br1
,为您的容器设置并在每个容器上设置特定的IP,甚至使用dhcp服务器来分配IP。 这是一个静态配置:
启动aa
容器并在我们的桥上添加一个IP, br1
为eth0
→ docker run -d --net=none --name aa busybox cat
→ pipework br1 -eth0 aa 192.168.17.4/24
启动bb
容器并在br1上添加192.168.17.5
→ docker run -d --net=none --name bb busybox cat
→ pipework br1 -eth0 bb 192.168.17.5/24
现在我们一直知道容器的IP地址
→ docker exec bb ping 192.168.17.4
Docker 1.8默认启用/etc/hosts
容器名称共享。
Docker 1.9在默认网络/网桥docker0
上禁用了此功能,但将在自定义网络上共享容器名称信息
创建网络
→ docker create network shared
ce8fb4c6d6d379e87314952f4dfbcdcd6cf6c03416431721bb8f6001492575ea
运行名为aa
的容器
→ docker run --name aa --net=shared -ti -d busybox sleep 5
754c7716cee65526cb2284066ccf2e495d494f5c351e281a89672aa5bdf1d84d
按容器名称aa
Ping
→ docker run --name bb --net=shared -ti --rm busybox ping aa
PING aa (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=1.354 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.081 ms
64 bytes from 172.18.0.2: seq=2 ttl=64 time=0.090 ms
64 bytes from 172.18.0.2: seq=3 ttl=64 time=0.114 ms
--- aa ping statistics ---
8 packets transmitted, 4 packets received, 50% packet loss
round-trip min/avg/max = 0.081/0.409/1.354 ms
现在容器在5秒后停止了
→ docker run --name bb --net=shared -ti --rm busybox ping aa
ping: bad address 'aa'
Docker本身通过其overlay
网络驱动程序支持多个主机网络。 这确实需要外部服务发现代理来提供kay /值存储服务,但这意味着您也可以在多个docker节点上执行此操作。
你用--volumes-from
标志做到这一点。 它看起来像这样:
$ docker run a --name a
$ docker run b --name b --volumes-from a
Docker将透明地为您处理网络。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.