#docker #docker-compose #docker-networking
#docker #docker-compose #docker-networking
Вопрос:
Я определяю URL для своего контейнера серверной службы в моем docker-compose.yaml.
environment:
PORT: 80
VUE_APP_BACKEND_URL: "mm_backend:8080"
Когда контейнеры запускаются, я проверяю свой внешний контейнер и могу убедиться, что переменная env была установлена правильно, как показано ниже.
Однако, когда я пытаюсь использовать свой внешний интерфейс для подключения к своему бэкэнду (извлечения данных), он сообщает мне, что VUE_APP_BACKEND_URL не определен на вкладке сеть.
Реализация и использование этой переменной окружения таковы в моем vue.js код
getOwners(){
fetch(`${process.env.VUE_APP_BACKEND_URL}/owners`, defaultOptions)
.then((response) => {
return response.json();
})
.then((data) => {
data.forEach((element) => {
var entry = {
value: element.id,
text: `${element.display_name} (${element.name})`
}
this.owners.push(entry)
})
})
Приветствуется любая помощь.
Комментарии:
1. Действительно ли код выполняется в браузере? Он никогда не сможет увидеть переменные среды Docker или имена хостов.
2. Да, я запускаю в браузере. Так что, я думаю, мне просто нужно жестко закодировать свои URL-адреса в своих вызовах?
Ответ №1:
Это не сработает, потому что process.env.someKey
недоступно в браузере. Другими словами, docker-compose не сильно поможет, если вы хотите передать любую переменную env в ваше интерфейсное приложение. Самый простой подход — определить backendUrl в самом коде в одном месте и использовать его для выполнения вызовов api. Если вам это не нравится, в StackOverflow уже есть несколько хороших ответов / решений для этой же проблемы.
Комментарии:
1. В итоге я поместил URL-адреса в сам код, и это, похоже, сработало! Спасибо.