Commit Graph

2369 Commits

Author SHA1 Message Date
Alexander Morozov 5f6d27ceba Simplify getEntrypointAndArgs
Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2015-10-27 09:36:11 -07:00
Alexander Morozov 6d9bb99c97 Return pointer from newBaseContainer
It makes code more consistent.

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2015-10-27 09:05:28 -07:00
Tibor Vass b72a431928 Merge pull request #17389 from tonistiigi/15995-duplicate-names
Fix duplicate container names conflict
2015-10-27 02:42:50 -04:00
Alessandro Boch 4f6f00e191 Do not update etc/hosts for every container
- Only user named containers will be published into
  other containers' etc/hosts file.
- Also block linking to containers which are not
  connected to the default network

Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-10-26 20:08:57 -07:00
Tonis Tiigi aee5486374 Fix duplicate container names conflict
While creating multiple containers the second 
container could remove the first one from graph
and not produce an error.

Fixes #15995

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
2015-10-26 16:57:50 -07:00
David Calavera fe1e04a84f Merge pull request #17285 from Microsoft/10662-exectp4workaround
Windows [TP4] Trap Hyper-V exec failure
2015-10-26 16:47:51 -07:00
David Calavera 4cbe227db8 Merge pull request #17378 from Microsoft/10662-unmountwithsyscall
Windows: Volumes PR rename UnmountWithSyscall
2015-10-26 16:15:00 -07:00
Tibor Vass 3f11360a54 Merge pull request #17384 from mavenugo/42def
Simple Info log to indicate the chosen IP Address for the default bridge
2015-10-26 19:11:56 -04:00
Madhu Venugopal 126d1b6ca1 Simple log to indicate the chosen IP Address for the default bridge
Signed-off-by: Madhu Venugopal <madhu@docker.com>
2015-10-26 14:46:08 -07:00
John Howard b1220a763c Windows: Refactor resources structure
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-10-26 13:48:16 -07:00
John Howard 853f2e9952 Windows: Volumes PR fix one of Tibors nits
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-10-26 13:34:49 -07:00
Brian Goff 5087e8c2e8 Merge pull request #17180 from rhatdan/destroy
Docker is calling cont.Destroy twice on success
2015-10-26 15:48:04 -04:00
Alessandro Boch be1c77595e Disable built-in SD on docker0 network
Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-10-23 19:46:28 -07:00
Sebastiaan van Stijn 8d4888df90 Merge pull request #16488 from splunk/splunk_log_driver
Add Splunk logging driver #16207
2015-10-23 18:22:14 -07:00
Santhosh Manohar 8e0bbb2898 Add libnetwork call on daemon rename
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
2015-10-23 16:26:24 -07:00
Tibor Vass e74cf8acad Merge pull request #16433 from Microsoft/10662-volumes5
Windows: [TP4] Add volume support
2015-10-23 18:43:07 -04:00
Denis Gladkikh 1f1dbf312d Add Splunk logging driver #16207
Allow to send Splunk logs using Http Event Collector

Signed-off-by: Denis Gladkikh <denis@gladkikh.email>
2015-10-23 13:37:53 -07:00
John Howard 2e56e78caf Windows [TP4] Trap Exec Hyper-V Cont error
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-10-23 08:42:24 -07:00
David Calavera 2afdc6582b Merge pull request #17274 from aboch/ai
Turn off discovery when icc == false
2015-10-22 13:08:31 -07:00
Alessandro Boch 20faaaa872 Turn off service discovery when icc==false
- Turn off built-in service discovery on docker0 bridge
  when icc is false

Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-10-22 12:02:02 -07:00
John Howard a7e686a779 Windows: Add volume support
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-10-22 10:42:53 -07:00
Jess Frazelle 70af70aa0b Merge pull request #17220 from calavera/fix_double_removal
Do not fail when a container is being removed and we request its delete again.
2015-10-21 13:57:16 -07:00
Tibor Vass 56ef47e881 Merge pull request #16890 from runcom/perf-boost
rmi and build cache miss performance improvements
2015-10-21 16:00:25 -04:00
Phil Estes 94a16c81f4 Merge pull request #17245 from dhiltgen/discovery_tls
Wire up libnetwork with TLS discovery options
2015-10-21 15:20:24 -04:00
David Calavera 8247eff8a8 Merge pull request #17213 from calavera/volume_driver_validate_name
Validate volume names for the local driver.
2015-10-21 11:48:54 -07:00
David Calavera 678acbcb3f Merge pull request #16992 from burke/fix-mqueue
Fix --ipc=host dependency on /dev/mqueue existing
2015-10-21 11:25:37 -07:00
Daniel Hiltgen 10e7806984 Wire up libnetwork with TLS discovery options
This change exposes the TLS configuration settings to libnetwork so it can
communicate with a key/value store that has been set up with mutual TLS.

TLS options were introduced with https://github.com/docker/docker/pull/16644
Libnetwork support was introduced with https://github.com/docker/libnetwork/pull/602

Signed-off-by: Daniel Hiltgen <daniel.hiltgen@docker.com>
2015-10-21 09:38:58 -07:00
David Calavera d6d60287ee Move volume name validation to the local driver.
Delegate validation tasks to the volume drivers. It's up to them
to decide whether a name is valid or not.
Restrict volume names for the local driver to prevent creating
mount points outside docker's volumes directory.

Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-10-21 12:28:26 -04:00
Antonio Murdaca f9e81b40f4 daemon: faster image cache miss detection
Lookup the graph parent reference to detect a builder cache miss before
looping the whole graph image index to build a parent-children tree.

Signed-off-by: Antonio Murdaca <runcom@redhat.com>
2015-10-21 17:13:45 +02:00
Antonio Murdaca 56f5e3459f graph: add parent img refcount for faster rmi
also fix a typo in pkg/truncindex package comment

Signed-off-by: Antonio Murdaca <runcom@redhat.com>
2015-10-21 17:13:45 +02:00
Brian Goff 78e2167976 Merge pull request #17202 from aboch/ipa
Do not mask ipam driver if no ip config is passed
2015-10-20 19:45:08 -04:00
David Calavera c4e49d1014 Do not fail when a container is being removed and we request its delete again.
Abort the process and return a success response, letting the original
request finish its job.

Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-10-20 18:48:34 -04:00
Brian Goff c516aa645e Merge pull request #17177 from runcom/bc-fixes
Return empty Config fields, now omitempty, for API < 1.21
2015-10-20 16:39:53 -04:00
Alessandro Boch 27f908a051 Do not mask ipam driver if no ip config is passed
Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-10-20 11:19:37 -07:00
Brian Goff 7777c1be9b Merge pull request #17176 from rhvgoyal/fix-locking-issue
devmapper: Drop devices lock before returning from function
2015-10-20 13:08:29 -04:00
xlgao-zju 609961ddcc validate the name of named volume
Signed-off-by: xlgao-zju <xlgao@zju.edu.cn>
2015-10-20 12:36:04 -04:00
Alexander Morozov ad861876e8 Merge pull request #17035 from estesp/fix-build-dir-perms
Correct build-time directory creation with user namespaced daemon
2015-10-20 08:57:19 -07:00
Tibor Vass 566964bf73 Merge pull request #17191 from mrjana/restart
Fix docker startup failure due to dangling endpoints
2015-10-20 10:32:33 -04:00
Phil Estes ae8c004dc1 Correct build-time directory creation with user namespaced daemon
This fixes errors in ownership on directory creation during build that
can cause inaccessible files depending on the paths in the Dockerfile
and non-existing directories in the starting image.

Add tests for the mkdir variants in pkg/idtools

Docker-DCO-1.1-Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com> (github: estesp)
2015-10-20 08:59:48 -04:00
Jana Radhakrishnan 8adfc7e2d2 Fix docker startup failure due to dangling endpoints
Fixes docker startup failure due to dangling endpoints
which makes docker to not come up.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
2015-10-19 21:29:35 -07:00
Jess Frazelle 48147d287b Merge pull request #17187 from mavenugo/dopts
Fail the container start if the network has been removed
2015-10-19 17:12:07 -07:00
Madhu Venugopal 8755920d0d Fail the container start if the network has been removed
Signed-off-by: Madhu Venugopal <madhu@docker.com>
2015-10-19 15:00:07 -07:00
Vivek Goyal 2f16895ee9 devmapper: Drop devices lock before returning from function
cleanupDeleted() takes devices.Lock() but does not drop it if there are
no deleted devices. Hence docker deadlocks if one is using deferred
device deletion feature. (--storage-opt dm.use_deferred_deletion=true).

Fix it. Drop the lock before returning.

Also added a unit test case to make sure in future this can be easily
detected if somebody changes the function.

Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
2015-10-19 17:51:17 -04:00
Alexander Morozov ab495ab0d0 Use more clear message for icc=false + iptables=false
Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2015-10-19 14:19:21 -07:00
Tibor Vass 82a8a14c4d Merge pull request #17128 from calavera/network_controller_enabled
Do not initialize the networking routes when netController is not enabled.
2015-10-19 16:13:31 -04:00
Dan Walsh 0c518b6ab2 Docker is calling cont.Destroy twice on success
Signed-off-by: Dan Walsh <dwalsh@redhat.com>
2015-10-19 14:53:55 -04:00
David Calavera eb982e7c00 Return 404 for all network operations without network controller.
This will prevent the api from trying to serve network requests in
systems where libnetwork is not enabled, returning 404 responses in any
case.

Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-10-19 14:40:18 -04:00
Antonio Murdaca 850bc0838a Return empty Config fields, now omitempty, for API < 1.21
Signed-off-by: Antonio Murdaca <runcom@redhat.com>
2015-10-19 19:09:36 +02:00
Morgan Bauer 2abf5d986e
refactor access to daemon member EventsService
Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
2015-10-19 09:41:29 -07:00
Doug Davis e62fd33d96 Merge pull request #17115 from mountkin/tag-on-build
Proposal: emit a "tag" event when building image with "-t" parameter
2015-10-19 12:35:58 -04:00
Shijiang Wei 2968fa44eb emit a "tag" event when building image with "-t" parameter
This is useful for cluster systems such as swarm to sync the image
state when new images are successfully built.

Signed-off-by: Shijiang Wei <mountkin@gmail.com>
2015-10-19 20:09:14 +08:00
Tibor Vass 365a0db0f0 Merge pull request #17046 from mavenugo/dopts
driver-opts for network create
2015-10-16 15:23:59 -07:00
David Calavera 8c1fa7f320 Merge pull request #16994 from Microsoft/10662-copied
Windows: Fix annoying bad log
2015-10-16 15:14:08 -07:00
Madhu Venugopal 6f3eb994b5 Pass network driver option in docker network command
Signed-off-by: Madhu Venugopal <madhu@docker.com>
2015-10-16 14:33:54 -07:00
Antonio Murdaca dee57e4c3e Merge pull request #17087 from LK4D4/speedup_ps
Speedup container list
2015-10-16 12:35:28 +02:00
Alexander Morozov f256d8ad2d Speedup container list
Remove all unneeded disk operations (reload TagStore, umarshal image)
for checking if image still points to same ID. Now slowest part is
queries to sqlite which hopefuly will be removed soon.

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
2015-10-15 20:41:35 -07:00
David Calavera e1804098b9 Merge pull request #16997 from Microsoft/10662-kill-parttwo
Windows: [TP4] docker kill handling part two
2015-10-15 14:42:19 -07:00
Vincent Demeester aaa8cae345 Merge pull request #16968 from MHBauer/network-refactor
refactor use of container struct from daemon
2015-10-14 17:48:08 +02:00
Burke Libbey fd955ce6ca
Better error when --host=ipc but no /dev/mqueue
Signed-off-by: Burke Libbey <burke.libbey@shopify.com>
2015-10-14 10:52:16 -04:00
Burke Libbey ab7923558d
Revert "Fix --ipc=host dependency on /dev/mqueue existing"
This reverts commit f624d6187a.

Signed-off-by: Burke Libbey <burke.libbey@shopify.com>
2015-10-14 10:52:04 -04:00
Morgan Bauer a0398fbd19
refactor use of container struct from daemon
- do existence check instead of get container
 - new connect method on daemon.
 - cli network disconnect integration test

Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
2015-10-13 16:34:28 -07:00
John Howard bc503ca8ab Windows: [TP4] docker kill handling
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-10-13 16:04:49 -07:00
John Howard 69949df242 Windows: Fix annoying bad log
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-10-13 15:03:20 -07:00
Antonio Murdaca cfcddefacd daemon: execdriver: lxc: fix cgroup paths
When running LXC dind (outer docker is started with native driver)
cgroup paths point to `/docker/CID` inside `/proc/self/mountinfo` but
these paths aren't mounted (root is wrong). This fix just discard the
cgroup dir from mountinfo and set it to root `/`.
This patch fixes/skip OOM LXC tests that were failing.
Fix #16520

Signed-off-by: Antonio Murdaca <runcom@linux.com>
Signed-off-by: Antonio Murdaca <amurdaca@redhat.com>
2015-10-13 14:46:59 -07:00
Antonio Murdaca 06f0d03ced daemon: execdriver: lxc: fix set memory swap
On LXC memory swap was only set to memory_limit*2 even if a value for
memory swap was provided. This patch fix this behavior to be the same
as the native driver and set correct memory swap in the template.
Also add a test specifically for LXC but w/o adding a new test
requirement.

Signed-off-by: Antonio Murdaca <runcom@linux.com>
2015-10-13 14:46:59 -07:00
Burke Libbey f624d6187a
Fix --ipc=host dependency on /dev/mqueue existing
Since #15862, containers fail to start when started with --ipc=host if
/dev/mqueue is not present. This change causes docker to create
container-local mounts for --ipc=host containers as well as in the
default case.

Signed-off-by: Burke Libbey <burke.libbey@shopify.com>
2015-10-13 17:46:55 -04:00
Alexandre Beslic 4ea3ff7061 Merge pull request #16910 from mavenugo/ipam
Vendoring libnetwork for the pluggable IPAM driver support
2015-10-13 14:41:19 -07:00
Vincent Demeester ce607916e9 Merge pull request #15796 from azurezk/add-size-to-inspect
add container size info to inspect
2015-10-13 23:16:10 +02:00
Madhu Venugopal cc6aece1fd IPAM API & UX
introduced --subnet, --ip-range and --gateway options in docker network
command. Also, user can allocate driver specific ip-address if any using
the --aux-address option.
Supports multiple subnets per network and also sharing ip range
across networks if the network-driver and ipam-driver supports it.
Example, Bridge driver doesnt support sharing same ip range across
networks.

Signed-off-by: Madhu Venugopal <madhu@docker.com>
2015-10-13 11:03:03 -07:00
Madhu Venugopal 0f351ce364 Docker side changes for the newly introduced IPAM driver
* Made use of IPAM driver primitives for legacy IP configurations
* Replaced custom Generics with backend labels

Signed-off-by: Madhu Venugopal <madhu@docker.com>
2015-10-13 10:52:59 -07:00
Sebastiaan van Stijn 3856c5efa6 Merge pull request #16961 from vdemeester/pr-15975-carry-for-docs
Carry #15975 - Add extra fields based on label and env for gelf/fluentd/json-file/journald log drivers
2015-10-13 09:30:32 -07:00
Vincent Demeester 5ecbc9747f Merge pull request #16303 from coolljt0725/add_docker_info_show_base_size
Add docker info show base filesystem size of container/image when use devicemapper
2015-10-13 14:43:52 +02:00
Tibor Vass 09ddb67dd4 Merge pull request #16962 from estesp/check-network-files-exist
Make sure network files exist before adding them to mounts
2015-10-12 15:38:51 -07:00
Jess Frazelle df79536769 Merge pull request #16009 from azurezk/vol-create-conflict-option
volume create error on conflict option
2015-10-12 15:27:36 -07:00
Phil Estes ed68486f68 Make sure network files exist before adding them to mounts
It is possible that network files do not exist, especially in the case
of `--net=host` where a host OS (like CoreOS) does not use certain
standard network files.  This patch verifies that the source file of a
network mount point exists before adding it to the list of mount points
for bind mounting from the container's metadata directory.

Docker-DCO-1.1-Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com> (github: estesp)
2015-10-12 17:18:34 -04:00
Daniel Dao 0083f6e984 add labels/env log option for jsonfile
this allows jsonfile logger to collect extra metadata from containers with
`--log-opt labels=label1,label2 --log-opt env=env1,env2`.

Extra attributes are saved into `attrs` attributes for each log data.

Signed-off-by: Daniel Dao <dqminh@cloudflare.com>
2015-10-12 21:12:46 +02:00
Daniel Dao 11a24f19c2 add labels/env log option for journald
this allows journald logger to collect extra metadata from containers with
`--log-opt labels=label1,label2 --log-opt env=env1,env2`

Signed-off-by: Daniel Dao <dqminh@cloudflare.com>
2015-10-12 21:12:46 +02:00
Daniel Dao 4cc8490283 add labels/env log option for fluentd
this allows fluentd logger to collect extra metadata from containers with
`--log-opt labels=label1,label2 --log-opt env=env1,env2`

Signed-off-by: Daniel Dao <dqminh@cloudflare.com>
2015-10-12 21:12:46 +02:00
Daniel Dao 5794a0190d add labels/env log option for gelf
this allows gelf logger to collect extra metadata from containers with
`--log-opt labels=label1,label2 --log-opt env=env1,env2`

Additional log field will be prefixed with `_` as per gelf protocol
https://www.graylog.org/resources/gelf/

Signed-off-by: Daniel Dao <dqminh@cloudflare.com>
2015-10-12 21:12:46 +02:00
Daniel Dao 656cdbb0e9 add env and labels to log context
Signed-off-by: Daniel Dao <dqminh@cloudflare.com>
2015-10-12 21:12:46 +02:00
Aaron Lehmann cba4bbad4f Remove trust package
Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
2015-10-12 10:51:28 -07:00
Tonis Tiigi 504e67b867 Calculate hash based image IDs on pull
Generate a hash chain involving the image configuration, layer digests,
and parent image hashes. Use the digests to compute IDs for each image
in a manifest, instead of using the remotely specified IDs.

To avoid breaking users' caches, check for images already in the graph
under old IDs, and avoid repulling an image if the version on disk under
the legacy ID ends up with the same digest that was computed from the
manifest for that image.

When a calculated ID already exists in the graph but can't be verified,
continue trying SHA256(digest) until a suitable ID is found.

"save" and "load" are not changed to use a similar scheme. "load" will
preserve the IDs present in the tar file.

Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
2015-10-12 10:51:28 -07:00
Phil Estes 79240b9eaf Correct mismatched function names (UID() and Gid())
All the go-lint work forced any existing "Uid" -> "UID", but seems to
not have the same rules for Gid, so stat package has calls UID() and
Gid().

Docker-DCO-1.1-Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com> (github: estesp)
2015-10-12 10:58:33 -04:00
Hu Keping a066b94ef0 Comment: add some lines back
Signed-off-by: Hu Keping <hukeping@huawei.com>
2015-10-12 19:34:58 +08:00
Kun Zhang 0ff3123eba volume create error on conflict option
Signed-off-by: Kun Zhang <zkazure@gmail.com>
2015-10-12 11:16:39 +08:00
Vincent Demeester 6e12d9fe62 Merge pull request #16865 from MHBauer/registry-service-refactor
refactor away direct references to daemon member
2015-10-11 21:47:58 +02:00
Lei Jitang 5c374c7137 Add docker info show base filesystem size of container/image when use devicemapper
Signed-off-by: Lei Jitang <leijitang@huawei.com>
2015-10-10 22:52:05 +08:00
Zhang Kun b4d6b23838 add size to inspect
Signed-off-by: Zhang Kun <zkazure@gmail.com>
2015-10-10 20:44:29 +08:00
Phil Estes 44e1023a93 Add user namespace enable flag `--userns-remap` in experimental build
This adds the capability to turn on user namespace support when using an
experimental build Docker daemon binary using the `--userns-remap` flag.

Also documentation is added to the experimental docs.

Docker-DCO-1.1-Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com> (github: estesp)
2015-10-09 20:50:05 -04:00
Phil Estes 442b45628e Add user namespace (mapping) support to the Docker engine
Adds support for the daemon to handle user namespace maps as a
per-daemon setting.

Support for handling uid/gid mapping is added to the builder,
archive/unarchive packages and functions, all graphdrivers (except
Windows), and the test suite is updated to handle user namespace daemon
rootgraph changes.

Docker-DCO-1.1-Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com> (github: estesp)
2015-10-09 17:47:37 -04:00
Morgan Bauer 215bfc73d2
refactor away direct references to daemon member
- add daemon methods Authenticate & SearchRegistryForImages
 - use new methods instead of directly accessing RegistryService

Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
2015-10-09 14:40:03 -07:00
Brian Goff 7787d6dc28 Merge pull request #16709 from MHBauer/daemon-derepo2
continue daemon refactor of Repositories()
2015-10-09 15:35:21 -04:00
Phil Estes f112cd6b6e Merge pull request #16868 from cpuguy83/speedup_graph_unittests
Do not probe plugins for graph init unless `-s`
2015-10-09 15:31:09 -04:00
Brian Goff 3b16cb15b4 Do not probe plugins for graph init unless `-s`
When `-s` is not specified, there is no need to ask if there is a plugin
with the specified name.

This speeds up unit tests dramatically since they don't need to wait the
timeout period for each call to `graphdriver.New`.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2015-10-09 12:02:54 -04:00
Brian Goff 96e1cda40f Merge pull request #16875 from hqhq/hq_quiet_at_info
Keep daemon quiet when using docker info
2015-10-09 11:26:53 -04:00
Deng Guangxing a1620084c5 remove useless function generateIfaceName()
generateIfaceName() is useless as libnetwork has done
the job.

Signed-off-by: Deng Guangxing <dengguangxing@huawei.com>
2015-10-09 18:07:54 +08:00
Qiang Huang aaacde4fd2 Keep daemon quiet when using docker info
If I have some unsupported sysinfo, it's warning on daemon
side every time I use `docker info`, it seems unnecessay and
annoying to me, let's keep it quiet.

Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
2015-10-09 14:57:47 +08:00
Michael Crosby 6d9a84bcd0 Merge pull request #16152 from chlunde/devmapper-mount-flags
Use pkg/mount to support more flags in dm.mountopt
2015-10-08 16:02:50 -07:00
Morgan Bauer ee36b57c8f
continue daemon refactor of Repositories()
- use daemon member directly rather than through a function call
 - create GetImage method for use external to deamon

Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
2015-10-08 15:06:55 -07:00
Jess Frazelle b50a88cfd7 Merge pull request #16644 from dhiltgen/discovery_tls
Add TLS support for discovery backend
2015-10-08 14:21:06 -07:00