如何使用`docker-machine create`以便docker引擎侦听自定义端口?

时间:2016-01-11 19:04:40

标签: docker port docker-machine

我的服务提供商不允许我连接到端口2376上的docker。是否有一个标记为docker-machine在主机上设置docker以侦听另一个端口但是2376以便命令如

docker-machine ls  要么 docker-machine env

工作?现在它们失败了,因为在主机上创建了docker之后,守护进程在端口2376上启动,这是无法访问的。当然,我可以在创建后手动更改该端口,但后面提到的命令无法连接到另一个端口上的主机上的docker守护程序,但是2376。

1 个答案:

答案 0 :(得分:1)

  

docker-machine是否有标志在主机上设置docker以侦听另一个端口但是2376

是的,使用docker daemon命令的-H--host选项。要使您的Docker守护程序侦听端口443(应该打开所有大多数防火墙),请启动您的docker守护程序:

docker daemon -H tcp://0.0.0.0:443

如果你的docker主机操作系统是Debian或Ubuntu,你可以在/etc/default/docker文件中添加行DOCKER_OPTS="-H tcp://0.0.0.0:443"来设置它。

如果您使用的是RedHat或CentOS,请将OPTIONS=-H tcp://0.0.0.0:443添加到/etc/sysconfig/docker文件中。

使用docker-machine

要使用自定义--host选项安装Docker引擎,您可以将docker machine与--engine-opt option一起使用:

docker-machine create --engine-opt host=tcp://0.0.0.0:443 ...

然后当您使用docker-machine env ...时,您会注意到仍会使用默认端口DOCKER_HOST设置2376环境变量,但现在您可以使用443覆盖它它会起作用。

不幸的是,这不允许docker-machine ls工作,因为docker-engine驱动程序中的docker引擎端口的2376值是硬编码的。如果您真的想让docker-machine ls为不同的端口工作,最简单的方法是复制您使用的docker-machine driver source file之一并对其他端口进行硬编码;然后用你的新驱动程序编译一个新的docker-machine二进制文件。

假设远程服务器的IP地址是11.22.33.44。

# create the docker engine using the generic Machine driver
docker-machine create --engine-opt host=tcp://0.0.0.0:443 --driver=generic --generic-ip-address=11.22.33.44 mytestengine

# prepare the environments so that docker client can connect on port 443
docker-machine env mytestengine
export DOCKER_HOST=tcp://11.22.33.44:443

# use docker client as usual
docker version