从Docker容器中访问主机的虚拟机
我正在使用本地计算机(Mac)和传统的虚拟机(称为sqlvm)(意思是我可以通过http:// sqlvm :)从本地主机访问这个虚拟机。 现在我在同一个本地主机(我的Mac)中设置了几个docker容器(使用docker-compose),它应该连接到虚拟机。 pymysql
引发一个exception:
OperationalError: (OperationalError) (2003, "Can't connect to MySQL server on 'sqlvm' ([Errno -2] Name or service not known)") None None
我怎样才能暴露外部“sqlvm”内部dockernetworking?
编辑:我试图添加net: "host"
的相关容器在yml文件中,并得到以下错误(在docker-compose up
):
ERROR: for defaultworker Cannot create container for service defaultworker: Conflicting options: host type networking can't be used with links. This would result in undefined behavior
我需要容器与“外部”和“内部”networking进行通信。
泊坞窗,compose.yml:
recommendation-rabbit: image: rabbitmq:3-management hostname: my-rabbit ports: - "8080:15672" - "5672:5672" command: bash -c "rabbitmq-server start" defaultworker: image: rcom-worker hostname: rcom-worker-host environment: - CELERY_BROKER_URL=amqp://user:pass@my-rabbit:5672 command: bash -c "celery worker -A app -l info -Q default -c 2 -n defaultworker -Ofair" links: - recommendation-rabbit:rabbit net: "host"
对于一个快速的解决scheme,你可以运行标志--net=host
所有容器,这意味着--net=host
容器将使用主机networking接口。 dockernetworking的更多信息可以在这里find。
你可以用vm做同样的事情。 所以现在VM和pymysql
容器将有相同的networking接口,因此pymysql
将工作。
还有其他方法可以做到这一点。
编辑 – 当你使用 – --net=host
那么你有权访问主机networking接口,并不会需要链接之间的容器,因为他们已经有一个命令接口。
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000 link/ether a0:48:1c:10:43:97 brd ff:ff:ff:ff:ff:ff 3: wlan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000 link/ether fc:4d:d4:50:23:04 brd ff:ff:ff:ff:ff:ff inet 192.168.1.107/24 brd 192.168.1.255 scope global wlan1 valid_lft forever preferred_lft forever inet6 fe80::fe4d:d4ff:fe50:2304/64 scope link valid_lft forever preferred_lft forever 4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN link/ether 02:42:c8:46:60:1c brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:c8ff:fe46:601c/64 scope link valid_lft forever preferred_lft forever
这对我来说是这样的。 所以可以观察到主机的networking接口wlan1
存在。 现在vm应该将mysql服务器的端口暴露给主机,所以如果你可以使用主机访问它,那么可以使用容器来访问它。
- docker可执行文件没有在$ PATH中find
- 如何在docker集装箱运行与gunicorn aiohttp?
- 在Docker中使用nginx服务Rails的预编译资产
- 扩展dockerpostgres图像来创build额外的数据库
- 使用Docker for Mac创buildswarm群集
- 如何configurationDocker的Windows推送使用主机文件的存储库
- 将bin文件复制到docker容器导致错误
- Codeception的Web驱动程序(在Docker上的Selenium)testing不能看到其他容器(尽pipe在我的开发机器?)
- docker-registry v2.2.0 S3configuration没有被覆盖