[2/2] docker-engine: add dependency on docker-proxy

Message ID 20170607225628.31423-2-christian@paral.in
State Superseded
Headers show

Commit Message

Christian Stewart June 7, 2017, 10:56 p.m.
docker-proxy is needed by docker-engine at runtime, and was
previously not included. This leads to the following error
when attempting to port-map ports to a container:

  $ docker run -p 8080:8080 nginx
  docker: Error response from daemon: driver failed programming external
  connectivity on endpoint:
  exec: "docker-proxy": executable file not found in $PATH.

Docker expects the docker-proxy binary to exist in the PATH.

Signed-off-by: Christian Stewart <christian@paral.in>
---
 package/docker-engine/Config.in | 1 +
 1 file changed, 1 insertion(+)

Comments

Arnout Vandecappelle June 13, 2017, 4:37 p.m. | #1
Hi Christian,

On 08-06-17 00:56, Christian Stewart wrote:
> docker-proxy is needed by docker-engine at runtime, and was
> previously not included. This leads to the following error
> when attempting to port-map ports to a container:
> 
>   $ docker run -p 8080:8080 nginx
>   docker: Error response from daemon: driver failed programming external
>   connectivity on endpoint:
>   exec: "docker-proxy": executable file not found in $PATH.
> 
> Docker expects the docker-proxy binary to exist in the PATH.

 I wonder if forcing these dependencies is really the way to go. As I understand
it, if docker is used without portmapping, docker-proxy isn't needed, right? So
we could basically consider docker-proxy a suboption of docker-engine. And add
to its help text something like:

	  This package is required to allow portmapping in docker-daemon.

 In fact, the same consideration goes for the other runtime dependencies of
docker-engine. containerd is probably pretty much unavoidable, but are iptables
and sqlite always needed, or only for certain features?

 Regards,
 Arnout

> 
> Signed-off-by: Christian Stewart <christian@paral.in>
> ---
>  package/docker-engine/Config.in | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/package/docker-engine/Config.in b/package/docker-engine/Config.in
> index 05670a7..8feb11b 100644
> --- a/package/docker-engine/Config.in
> +++ b/package/docker-engine/Config.in
> @@ -16,6 +16,7 @@ config BR2_PACKAGE_DOCKER_ENGINE_DAEMON
>  	default y
>  	depends on BR2_USE_MMU # docker-containerd
>  	select BR2_PACKAGE_DOCKER_CONTAINERD # runtime dependency
> +	select BR2_PACKAGE_DOCKER_PROXY # runtime dependency
>  	select BR2_PACKAGE_IPTABLES # runtime dependency
>  	select BR2_PACKAGE_SQLITE # runtime dependency
>  	help
>
Christian Stewart June 13, 2017, 4:42 p.m. | #2
Arnout,

On Tue, Jun 13, 2017 at 9:37 AM, Arnout Vandecappelle <arnout@mind.be>
>  In fact, the same consideration goes for the other runtime dependencies of
> docker-engine. containerd is probably pretty much unavoidable, but are iptables
> and sqlite always needed, or only for certain features?


Please see this patch series and review it first, in light of what
you're suggesting here:

 - https://patchwork.ozlabs.org/patch/760397/
 - https://patchwork.ozlabs.org/patch/760394/
 - https://patchwork.ozlabs.org/patch/760395/

Sqlite is not required at all, afaik, and I will run some tests today
to see if disabling it breaks Docker (it probably won't).

iptables is definitely required, I wouldn't make that optional, just
because Docker does a lot of network abstraction internally with it,
and would very likely break completely without it.

Best,
Christian

Patch

diff --git a/package/docker-engine/Config.in b/package/docker-engine/Config.in
index 05670a7..8feb11b 100644
--- a/package/docker-engine/Config.in
+++ b/package/docker-engine/Config.in
@@ -16,6 +16,7 @@  config BR2_PACKAGE_DOCKER_ENGINE_DAEMON
 	default y
 	depends on BR2_USE_MMU # docker-containerd
 	select BR2_PACKAGE_DOCKER_CONTAINERD # runtime dependency
+	select BR2_PACKAGE_DOCKER_PROXY # runtime dependency
 	select BR2_PACKAGE_IPTABLES # runtime dependency
 	select BR2_PACKAGE_SQLITE # runtime dependency
 	help