Commit graph

111 commits

Author SHA1 Message Date
Alessandro Boch
a5aeffcb59 Fix when connecting/disconnecting to/from default gw network
- Restoring original behavior where on disconnect
  from overlay network (only connected network), it also
  disconnects from default gw network.
- On sandbox delete, the leave and delete of each
  endpoint is performed, regardless of whether the endpoint
  is the gw network endpoint. This endpoint is already
  automatically removed in endpoint.sbLeave()
- Also do not let internal network dictate container does
  not need external connectivity. Before this fix, if a container
  was connected to an overlay and an internal network, it may not
  get attached to the default gw network.

Signed-off-by: Alessandro Boch <aboch@docker.com>
2016-04-06 09:29:41 -07:00
Madhu Venugopal
12f04e292f Revert "Do not leave/delete gw endpoint twice"
This reverts commit c957564753 introduced
via #1064.

Signed-off-by: Madhu Venugopal <madhu@docker.com>
2016-04-05 18:55:16 -07:00
Alessandro Boch
c957564753 Do not leave/delete gw endpoint twice
- On sandbox delete, the leave and delete of each
  endpoint is performed, regardless of whether the endpoint
  is the gw network endpoint. This endpoint is already
  automatically removed in endpoint.sbLeave() by
  sb.clearDefaultGW() when the sandbox is marked for
  deletion.
- Also restoring otiginal behavior where on disconnect
  from overlay network (only connected network), it also
  disconnects from default gw network.
- Also do not let internal network dictate container does
  not need external connectivity. Before this fix, if a container
  was connected to an overlay and an internal network, it may not
  get attached to the default gw network.
- needDefaultGw() takes now into account whether the sandbox
  is marked for deletion

Signed-off-by: Alessandro Boch <aboch@docker.com>
2016-04-05 11:32:49 -07:00
Alessandro Boch
df975778fc Log time taken to set sandbox key
Signed-off-by: Alessandro Boch <aboch@docker.com>
2016-03-28 20:40:51 -07:00
Santhosh Manohar
0c22e1bd07 Avoid V6 queries in docker domain going to external nameservers
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-03-19 03:07:08 -07:00
Santhosh Manohar
2e566e3882 Add AAAA record handling in embedded DNS server
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-03-16 19:00:17 -07:00
Santhosh Manohar
bb3c060954 Merge pull request #810 from aboch/se
Move exposed ports and port bindings from Endpoint to Sandbox
2016-03-06 16:25:57 -08:00
Alessandro Boch
1638fbdf27 Move exposed ports from Endpoint to Sandbox
Signed-off-by: Alessandro Boch <aboch@docker.com>
2016-03-06 09:31:26 -08:00
Alessandro Boch
747ea8e52b Merge pull request #974 from sanimej/RR
Embedded DNS server to return multiple A records for enabling DNS Round Robin
2016-03-04 17:12:35 -08:00
Madhu Venugopal
86db344e56 Merge pull request #803 from aboch/pm
Libnetwork to program container interface's MAC
2016-03-03 18:12:08 -08:00
Madhu Venugopal
eef3a6da75 Merge pull request #895 from sanimej/loop
Source external DNS queries from container namespace
2016-03-03 17:27:19 -08:00
Santhosh Manohar
51058eecec Implement DNS RR in the Docker embedded DNS server
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-03-03 09:33:10 -08:00
Madhu Venugopal
093df0b922 Fixed a panic issue in clearNetworkResources
Not sure why govet didnt catch this obvious error

Signed-off-by: Madhu Venugopal <madhu@docker.com>
2016-03-03 08:25:13 -08:00
Santhosh Manohar
43e3da2f3a Source external DNS queries from container namespace
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-03-03 07:29:32 -08:00
Stefan Weil
13451d9a07 Fix some typos in comments and strings
All of them were found and fixed by codespell.

Signed-off-by: Stefan Weil <sw@weilnetz.de>
2016-03-01 16:45:14 +01:00
Alexander Morozov
0eb01bbbee Fix race in Statistics
Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2016-02-29 09:45:15 -08:00
msabansal
9871032e4d Windows HNS integration
Signed-off-by: msabansal <sabansal@microsoft.com>
2016-02-12 15:01:37 -08:00
Alessandro Boch
83f1107e59 Delete the interface on endpoint delete in overlay
- Attempt the veth delete only after both ends
  are moved into the default network namespace.
  Which is after both driver.Leave() and
  sandbox.clearNetworkResources() are called.

Signed-off-by: Alessandro Boch <aboch@docker.com>
2016-01-29 16:04:14 -08:00
Madhu Venugopal
7a76968485 expose Endpoints API for a Sandbox
Signed-off-by: Madhu Venugopal <madhu@docker.com>
2016-01-25 16:23:00 -08:00
Madhu Venugopal
1419d96a01 Reducing the complexity in default gateway service handling
By removing the need to clear the default gateway during sbJoin and
sbLeave to account for other bridge network, the default-gw endpoint
will stay with the container, it will also help retain the container
property.

Signed-off-by: Madhu Venugopal <madhu@docker.com>
2016-01-23 11:10:00 -08:00
Jana Radhakrishnan
bb5c52a659 Merge pull request #888 from sanimej/dns
Embedded DNS server should resolve only in docker network domain
2016-01-21 18:19:36 -08:00
Santhosh Manohar
411bc69949 Embedded DNS server should resolve only in docker network domain
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-01-19 06:47:30 -08:00
Santhosh Manohar
30ef9bcf4a Retain V6 DNS server in resolv.conf; use only V4 servers for fallback
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-01-19 00:06:19 -08:00
Santhosh Manohar
4e25ffc8d9 Loopback IP shouldn't be filtered from resolv.conf in host mode
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-01-18 20:18:44 -08:00
Santhosh Manohar
5f22db217a Enable embedded DNS server on network connect to a user defined network
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-01-18 18:33:36 -08:00
aboch
3e6a42bcdb Merge pull request #880 from mavenugo/ddd
Force delete sandbox during sandboxCleanup
2016-01-19 13:57:53 -05:00
Madhu Venugopal
a7c52918fd Force delete sandbox during sandboxCleanup
Stale sandbox and endpoints are cleaned up during controller init.
Since we reuse the exact same code-path, for sandbox and endpoint
delete, they try to load the plugin and it causes daemon startup
timeouts since the external plugin containers cant be loaded at that
time. Since the cleanup is actually performed for the libnetwork core
states, we can force delete sandbox and endpoint even if the driver is
not loaded.

Signed-off-by: Madhu Venugopal <madhu@docker.com>
2016-01-17 14:47:49 -08:00
Madhu Venugopal
69acfe6332 Merge pull request #863 from wenchma/typo_error
Fixes some typo errors
2016-01-16 12:23:52 -08:00
Santhosh Manohar
05bd52dbb6 Setup embedded DNS server correctly on container restart
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-01-14 10:16:13 -08:00
wenchma
0b07ad6202 Fixes some typo errors
Signed-off-by: Wen Cheng Ma <wenchma@cn.ibm.com>
2016-01-13 12:59:24 +08:00
Madhu Venugopal
ec622bf158 Forced endpoint delete
Signed-off-by: Madhu Venugopal <madhu@docker.com>
2016-01-12 18:50:28 +00:00
Madhu Venugopal
2db863e5d7 Global alias support
Signed-off-by: Madhu Venugopal <madhu@docker.com>
2016-01-08 12:27:15 -08:00
Madhu Venugopal
63e20c2f3d Alias support
Signed-off-by: Madhu Venugopal <madhu@docker.com>
2016-01-07 14:50:23 -08:00
Santhosh Manohar
cf7ed0a717 Embedded DNS server
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2016-01-07 00:25:26 -08:00
Alessandro Boch
6b40581ea5 Libnetwork to set container interface's MAC
- Consistently with what it does for IP addresses, libnetwork
  will also program the container interface's MAC address with
  the value set by network driver in InterfaceInfo.

Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-12-04 16:56:46 -08:00
Jana Radhakrishnan
84abbcefa8 Fix a couple of edge cases in service discovery
The first issue is an ordering problem where sandbox
attached version of endpoint object should be pushed
to the watch database first so that any other create endpoint
which is in progress can make use of it immediately to update
the container hosts file. And only after that the current
container should try to retrieve the service records from the
service data base and upate it's hosts file. With the previous
order there is a small time window, when another endpoint create
will find this endpoint but it doesn't have the sandbox context
while the svc record population from svc db has already happened
so that container will totally miss to populate the service record
of the newly created endpoint.

The second issue is trying to rebuild the /etc/hosts file from scratch
during endpoint join and this may sometimes happen after the service
record add for another endpoint  has happened on the container
file. Obviously this rebuilding will wipe out that service record which
was just added. Removed the rebuilding of /etc/hosts file during
endpoint join. The initial population of /etc/hosts file should only
happen during sandbox creation time. In the endpoint join just added
the backward-compatible self ip -> hostname entry as just another
record.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-11-25 15:25:56 -08:00
Jana Radhakrishnan
1452fc31d4 Retain sandbox only if network is not available
It is sufficient to check only if network is available
in store to make the decision of whether to retain the
stale sandbox. If the endpoints are not available then
there is no point in retaining the sandbox anyways. This
fixes some extreme corner cases, where daemon goes down
right in the middle of sandbox cleanup happening.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-11-02 17:54:22 -08:00
Jana Radhakrishnan
670302e66b Fix stale sandbox from store problem
At times, when checkpointed sandbox from store cannot be
cleaned up properly we still retain the sandbox in both
the store and in memory. But this sandbox store may not
contain important configuration information from docker.
So when docker requests a new sandbox, instead of using
it as is, reconcile the sandbox state from store with the
the configuration information provided by docker. To do this
mark the sandbox from store as stub and never reveal it to
external searches. When docker requests a new sandbox, update
the stub sandbox and clear the stub flag.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-11-02 00:38:33 -08:00
Jana Radhakrishnan
967917c8b4 Fix race in os sandbox sharing
There is a race in os sandbox sharing code where two containers which
are sharing the os sandbox try to recreate the os sandbox again which
might result in destroying the os sandbox and recreating it. Since the
os sandbox sharing is happening only for default sandbox, refactored the
code to create os sandbox only once inside a `sync.Once` api so that it
happens exactly once and gets reused by other containers. Also disabled
deleting this os sandbox.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-11-01 08:15:32 -08:00
Madhu Venugopal
e636d8398b set cntlr sandbox before cleaning endpoints in ungraceful restart case
Signed-off-by: Madhu Venugopal <madhu@docker.com>
2015-10-30 14:40:17 -07:00
Madhu Venugopal
c8a66f5e72 Fixes a case of ungraceful daemon restart + unreachable store
For ungraceful daemon restarts, libnetwork has sandbox cleanup logic to
remove any stale & dangling resources. But, if the store is down during
the daemon restart, then the cleanup logic would not be able to perform
complete cleanup. During such cases, the sandbox has been removed. With
this fix, we retain the sandbox if the store is down and the endpoint
couldnt be cleaned. When the container is later restarted in docker
daemon, we will perform a sandbox cleanup and that will complete the
cleanup round.

Signed-off-by: Madhu Venugopal <madhu@docker.com>
2015-10-29 17:16:52 -07:00
Alessandro Boch
7b4b56169b Some functions' logic cleanup
Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-10-27 11:08:42 -07:00
Santhosh Manohar
3da8471681 Handling container rename in libnetwork
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2015-10-23 05:31:53 -07:00
Jana Radhakrishnan
cdb82dc22d Synchronize /etc/hosts updates at file level
Introduced a path level lock to synchronize updates
to /etc/hosts writes. A path level cache is maintained
to only synchronize only at the file level.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-10-21 07:45:29 -07:00
Jana Radhakrishnan
96d819cb06 Make sandbox cleanup robust for ungraceful exits
When the daemon has a lot of containers and even when
the daemon tries to give 15 second to stop all containers
it is not enough. So the daemon forces a shut down at the end
of 15 seconds. And hence in a situation with a lot of
containers even gracefully bringing down the daemon will result
in a lot of containers fully not brought down.

In addition to this the daemon force killing itself can happen
in any arbitrary point in time which will result in inconsistent
checkpointed state for the sandbox. This makes the cleanup really
fail when we come back up and in many cases because of this
inability to cleanup properly on restart will result in daemon not
able to restart because we are not able to delete the default network.

This commit ensures that the sandbox state stored in the disk is
never inconsistent so that when we come back up we will always be
able to cleanup the sandbox state.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-10-19 13:30:47 -07:00
Jana Radhakrishnan
1ffe6fef02 Move sandbox resources when container restarts
Currently when container has a restart policy and gets
restarted, docker does not release networking and allocate
it back. But it presents libnetwork with a new sandbox while
all the network resources are locked in the old sandbox. This
commit attempts to move all the network resources from the old
sandbox to the new sandbox when libnetwork is presented with the
new sandbox.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-10-09 13:43:25 -07:00
Jana Radhakrishnan
e41b4765bd Cleanup dangling sandboxes on boot up
Currently when docker exits ungracefully it may leave
dangling sandboxes which may hold onto precious network
resources. Added checkpoint state for sandboxes which
on boot up will be used to clean up the sandboxes and
network resources.

On bootup the remaining dangling state in the checkpoint
are read and cleaned up before accepting any new
network allocation requests.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-10-07 20:08:47 -07:00
Jana Radhakrishnan
c74538c22e Merge pull request #565 from mavenugo/adb
Moved InterfaceStatistics from osl into types package
2015-10-06 16:10:37 -07:00
Jana Radhakrishnan
71e14dd52a Remove always-on watch for networks and endpoints
Always on watching of networks and endpoints can
affect scalability of the cluster beyond a few nodes.
Remove pro active watching and watch only the objects
you are interested in.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-10-06 14:15:49 -07:00
Alessandro Boch
ddcfab5f81 libnetwork <-> ipam driver interaction
Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-10-03 16:18:19 -07:00