如何在不影响主机的情况下启动 docker



我正在尝试从这里运行 docker 映像:http://laradock.io/

我陷入的问题之一是一系列错误:

Error starting userland proxy: listen tcp 0.0.0.0:443: listen: address already in use
Error starting userland proxy: listen tcp 0.0.0.0:6379: bind: address already in use
Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use
...

在寻找解决方案时,我发现要解决此问题,我需要在我的主机上杀死nginx,mysql,redis等,以允许docker接管端口。

但是我尝试使用 docker(或任何 VM(的主要方法是使应用程序不使用主机,而是使用像 192.168.1.5 这样的地址(假设这将是 docker 容器的 IP 地址(

我的问题是,使用 docker 是否可以做到这一点,如果是,那么我需要做什么来保持主机和 docker 之间的 100% 分离。

这个问题有几种解决方案

  1. 不要发布端口。 如果您不发布端口,则不会有任何冲突。
  2. 将端口发布到其他内容。 你可能有类似--publish 443:443. 这是一个冲突,因为您的主机已经在使用 443 进行某些操作。 您可以将其更改为--publish 20443:443.
  3. 将端口发布到特定接口(如果可能(。 如果您的主机在 192.168.100.101 上使用端口 443,但不在 127.0.100.102 上使用端口 443,则可以执行--publish 127.0.100.102:443:443而不会发生冲突。
  4. 使用publish-all. 而不是--publish 443:443使用--publish-all. Docker 将选择系统上未使用的端口 - 保证没有冲突。 您可以使用docker psdocker inspect来了解这些端口是什么。

我发现的一个解决方案是使用 docker-machine vm。

# Create machine
docker-machine create --driver=virtualbox --virtualbox-hostonly-cidr "10.10.10.1/24" docker-default
# Export docker .env variables
eval $(docker-machine env docker-default)

我发现的一个问题是我需要使用 NFS 与 docker 机器共享项目文件夹。 为此,我使用了以下脚本:https://github.com/adlogix/docker-machine-nfs 我不得不修改文件,因为在 linux 上 IP 后不能有空格(第 372 行(:

exports="${exports}$shared_folder $machine_ip$prop_nfs_confign"

然后我可以跑

docker-machine-nfs docker-default -f --nfs-config="(rw,no_subtree_check,crossmnt,all_squash,anonuid=1000,anongid=1000)" 
--shared-folder=/mnt/projects 
--shared-folder=/home/hubertnnn/projects

相关内容

最新更新