我是使用 fastapi 的新手。我在 docker 容器中有一个 main.py。当我使用
连接到 fastapi 时uvicorn main:app —-reload
来自我的容器。系统提示我连接到 http://127.0.0.1:8000。将地址复制到 Firefox 时出现错误:
unable to connect.
如何连接fastapi服务器?
P.S 我正在工作的 git 分支是由另一位同事开发的,所以我几乎不知道 fastapi 是如何在 docker 中设置的
你需要使用命令
uvicorn main:app --reload --host 0.0.0.0
你的docker容器就像一台电脑,是独立的。因此它不允许从外部源访问。使用
--host
选项,您可以允许外部连接(从容器的角度来看在本地主机之外)。基本上,docker 的 localhost 与您计算机的 localhost 不同。
解决方案。通过部署应用程序将具有公共地址和网络驱动程序。远程可以使用它,在开发中可以在本地运行selenium。
import unittest
from selenium import webdriver
import os
from dotenv import find_dotenv, load_dotenv
from webdriver_manager.chrome import ChromeDriverManager
load_dotenv(find_dotenv())
class TestWebListAll(unittest.TestCase):
def setUp(self) -> None:
chrome_options = webdriver.ChromeOptions()
if os.environ.get("LOCAL_DEV"): # == 'True'
self.url = 'http://127.0.0.1:8000/'
self.driver = webdriver.Chrome(ChromeDriverManager().install())
else:
self.driver = webdriver.Remote(
command_executor='http://localhost:4444',
options=chrome_options
)
self.url = 'insert public addres' #
def tearDown(self) -> None:
self.driver.quit()
def test_(self):
self.driver.get(self.url)
print(self.driver.title)
您还需要确保您的端口映射正确。
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
主机设置为 0.0.0.0,可以作为 localhost 在本地访问(大多数为 127.0.0.1)。
docker build -t myfastapi
docker run --name mycontainer -p 8000:80
这会将您本地的端口 8000 映射到 docker 的 80。
现在,您应该能够访问 localhost:8000 的服务器了
希望这有帮助!
作为初学者,同样的事情发生在我身上,查看错误,我意识到我没有保存 main.py