当前位置: 首页 > 面试题库 >

使容器只能从本地主机访问

吕自明
2023-03-14
问题内容

我在Debian Jessie上安装了Docker引擎,并且正在其中运行带有nginx的容器。我的“运行”命令如下所示:

docker run -p 1234:80 -d -v /var/www/:/usr/share/nginx/html nginx:1.9

它工作正常,问题在于现在可以通过访问此容器的内容http://{server_ip}:1234。我想在此服务器上运行多个容器(域),所以我想为其设置反向代理。

我如何确保只能通过反向代理访问容器,而不能直接从反向代理访问容器IP:port?例如。:

http://{server_ip}:1234  # not found, connection refused, etc...
http://localhost:1234  # works fine

//编辑: 为了清楚起见-我不是在问如何设置反向代理,而是如何运行只能从本地主机访问的Docker容器。


问题答案:

在端口映射中指定所需的主机IP

docker run -p 127.0.0.1:1234:80 -d -v /var/www/:/usr/share/nginx/html nginx:1.9

如果要执行反向代理,则可能希望将它们与反向代理一起全部放在用户定义的网络上,然后所有内容都在容器中并且可以在其内部网络上访问。

docker network create net
docker run -d --net=web -v /var/www/:/usr/share/nginx/html nginx:1.9
docker run -d -p 80:80 --net=web haproxy


 类似资料:
  • 以下图片: 当我运行这个命令时,我可以在http://localhost:4444/上看到Selenium 任何帮助让这两种方式中的任何一种有效。

  • 问题内容: 我正在开发服务,并在那里使用docker compose来旋转诸如postgres,redis,elasticsearch之类的服务。我有一个基于RubyOnRails的Web应用程序,并从所有这些服务中进行读写操作。 这是我的 我可以在此网络中ping容器 到目前为止,一切都很好。现在我想在主机上的Rails应用程序上运行ruby,但是能够像目前这样使用url访问postgres实例

  • 问题内容: 假设我有一台服务器在OSX的8000端口上运行。我的Docker容器如何通过访问它?由于容器中的应用程序不在我的控制范围内,因此我也无法更改主机名。 我已经阅读了前面有关使用容器访问主机网络的讨论。但是,我在OSX上,并且Docker在VM内运行,因此Docker容器中的 localhost转到了VM,而不是我的真实机器。 然后,我尝试像这样的端口转发解决方法:无济于事。 任何建议将不

  • 我有一个docker应用程序,我使用以下docker compose。yml运行它: 我有一个没有docker化的服务器在我的机器上运行,我可以通过访问它。我希望我的服务能够访问它。 我发现有人建议在我的服务配置中添加以下内容: 但是当我添加这个时,并尝试,我得到。当我尝试<code>curl时,也会出现同样的错误http://host.docker.internal:3000。 我拼命地尝试将端

  • 问题内容: 我正在运行一个docker mysql映像,以下是docker-compose.yml文件的外观: 这很好。 我的问题是:如何从主机(我的Macbook)上的命令行mysql客户端连接到在该容器上运行的MySQL实例? 澄清: 我有一台装有Docker的Macbook 我有一个带有mysql的docker容器 我想从Macbook的终端连接到上述容器上运行的mysql实例 我不想使用命