如何使用`docker-machine create`来让docker引擎监听一个自定义的端口?

我的服务提供商不允许我连接到docker上的端口2376.是否有一个docker机器的标志设置主机上的docker监听另一个端口,但2376,使命令

docker机器ls或docker机器env

工作? 现在他们失败了,因为在主机上创builddocker之后,守护进程从不可访问的端口2376开始。 当然,我可以在创build后手动更改该端口,但是后面提到的命令并不知道要连接到另一个端口上的该主机上的docker守护进程,而是2376。

是否有一个标志docker机器build立在主机上的docker监听另一个港口,但2376年

是的,使用docker daemon命令的-H--host选项。 为了让你的Docker守护进程监听端口443(应该打开所有的防火墙),启动你的d​​ocker守护进程:

 docker daemon -H tcp://0.0.0.0:443 

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

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


使用docker机

要使用自定义的主机选项安装Docker引擎,可以使用--engine-opt机器和--engine-opt选项 :

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

然后,当你使用docker-machine env ...你会注意到DOCKER_HOST环境variables仍然会被设置为默认的端口2376 ,但是现在你可以用443覆盖它,它将工作。

不幸的是,这将不允许docker-machine ls工作,因为docker引擎端口的2376值是在docker机器驱动程序中硬编码的。 如果你真的想让docker-machine ls工作在不同的端口上,最简单的方法是复制你使用的一个docker-machine驱动程序源文件并硬编码一个不同的端口。 然后用新的驱动程序编译一个新的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