如何使用`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(应该打开所有的防火墙),启动你的docker守护进程:
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