Ich habe eine Beispielumgebung mit Django, nuxt.js, Express usw. mit der folgenden Konfiguration erstellt.
nuxt.js R ・ ・ SSR / Frontend Express, Django server ・ ・ API-Server
Django läuft auf dem Host-Computer nuxt.js, Entdecker laufen auf Docker MySQL wird in einem separaten Container ausgeführt
Ich habe es geschafft, während ich überlegte, jede Ressource zu lernen (Django, Express, Nuxt). In diesem Artikel habe ich versucht, den Kommunikationsteil zwischen Ressourcen zu organisieren.
Ich möchte die verschiedenen Teile von Django, Express und Nuxt getrennt organisieren.
MySQL-Container
docker run \
・ ・ ・
-p 13306:3306 \ #Binden Sie 13306 auf localhost an 3306 im Container
・ ・ ・
-itd mysql:5.7
node.js Container
docker run \
・ ・ ・
-p 3000:3000 \ #Binden Sie 3000 auf localhost an 3000 im Container
-p 3001:3001 \ #Binden Sie 3001 auf localhost an 3001 im Container
・ ・ ・
node:latest
Greifen Sie auf nuxt.js über Port 3000 zu
Der Zugriff auf Express von nuxt.js erfolgt über Port 3001 (Hier kann die Kommunikation vom Browser mit der SSR von nuxt.js identisch sein.)
async fetch(context): Promise<void> {
・ ・ ・
const api_host = 'http://localhost:3001'
・ ・ ・
const response = await (context as any).$axios.$get(
api_host +・ ・ ・
)
In dieser Konfiguration ist jedoch die SSR von nuxt.js (wenn process.server == true) Kommunikation mit localhost: 8000 (später beschrieben) nicht möglich
async fetch(context): Promise<void> {
let api_host: string
//Beim Rendern auf der Serverseite
if (process.server) {
api_host = ??????
}
//Beim Zugriff über einen Browser
else {
api_host = 'http://localhost:8000'
}
const response = await (context as any).$axios.$get(
api_host +・ ・ ・
)
Als Schlussfolgerung, Ich konnte mit diesem Hostnamen in der Docker Desktop Mac-Umgebung zugreifen
http://host.docker.internal:8000
Dies scheint jedoch ein in Docker Desktop verfügbarer Host zu sein (sogar die Windows-Version?)
Ich erstelle eine App mit derselben Konfiguration unter Windows, aber aus verschiedenen Gründen ist Docker Desktop unter Windows Ich habe es nicht installiert und verwende Docker in den Centos der virtuellen Box. Zu diesem Zeitpunkt war "host.docker.internal" nicht für den Zugriff auf den Hostcomputer innerhalb des Containers gültig. Es scheint, dass Sie mit Windows vom Container aus kommunizieren müssen, vorbei an den Virtualbox-Centos. In Bezug auf diese Lösung wurde der folgende Artikel von Don Pisha erwähnt Zugriff auf das Host-Betriebssystem über einen Container unter Windows + VirtualBox + Docker
Treffen Sie Folgendes mit Centos in der Virtualbox
$ ip r
default via 10.0.2.2 dev eth0 proto dhcp metric 100
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.18.0.0/16 dev br-25ec00a7e9f1 proto kernel scope link src 172.18.0.1
172.19.0.0/16 dev br-94818cb53527 proto kernel scope link src 172.19.0.1
192.168.33.0/24 dev eth1 proto kernel scope link src 192.168.33.11 metric 101
default via
scheint das Standard-Gateway zu sein,
Die Kommunikation vom Container zu Windows war über diese IP "10.0.2.2" möglich
http://10.0.2.2:8000
In nuxt.js wird in .env für jede Mac- und Windows-Umgebung ein Host für die Verbindung definiert und verwendet. Ich möchte die Details des Codes hier separat zusammenfassen.
Recommended Posts