在 azure 应用服务上部署 nginx 容器的正确方法是什么?
What is the correct way to deploy an nginx container on azure app service?
我构建了一个 React 应用程序,并创建了一个使用 nginx 图像的 docker 文件。我可以在本地构建 运行 docker 容器,它成功地为我的 React 应用程序提供服务。但是,当我尝试将其部署到 azure 应用程序服务时,由于某种原因它失败了。在 logstream 的日志中,它只是说“您的容器无法启动”让我感到困惑的是,我正在以与我成功部署数百个 java 容器的方式非常相似的方式部署它 运行ning弹簧启动应用程序。在这种情况下我没问题,但出于某种原因,我花了几天时间才让这个 nginx/react 应用程序在应用程序服务上运行。
我正在使用 Terraform 配置应用程序服务。代码如下所示。
resource "azurerm_app_service_plan" "dpt_appservice_plan" {
name = "${var.ENVIRONMENT}-dpt-app-service-plan"
location = azurerm_resource_group.dpt_rg.location
resource_group_name = azurerm_resource_group.dpt_rg.name
kind = "Linux"
reserved = true
sku {
tier = "Basic"
size = "S1"
}
}
resource "azurerm_app_service" "dpt_my_website_app_service" {
name = "${var.ENVIRONMENT}-dpt-my-website-app-service"
location = azurerm_resource_group.dpt_rg.location
resource_group_name = azurerm_resource_group.dpt_rg.name
app_service_plan_id = azurerm_app_service_plan.dpt_appservice_plan.id
site_config {
always_on = false
linux_fx_version = "DOCKER|${var.ENVIRONMENT}<acr>.azurecr.io/<registry>:latest"
}
app_settings = {
DOCKER_REGISTRY_SERVER_URL = "https:# acr.azurecr.io"
DOCKER_REGISTRY_SERVER_USERNAME = azurerm_container_registry.dpt_acr.admin_username
DOCKER_REGISTRY_SERVER_PASSWORD = azurerm_container_registry.dpt_acr.admin_password
WEBSITES_PORT = 8080
WEBSITES_CONTAINER_START_TIME_LIMIT = 300
}
}
我构建 React 应用程序并从构建目录中取出内容并将它们放入 nginx 容器中
FROM nginx
COPY build /usr/share/nginx/html
COPY docker/default.conf /etc/nginx/conf.d/default.conf
EXPOSE 8080 80
ENTRYPOINT ["nginx", "-g", "daemon off;"]
有人知道将带有 React 应用程序的 nginx 容器部署到 Azure 应用程序服务的正确方法吗?
那里发布的所有代码都是正确的。我通过更改 azure-pipelines 文件解决了这个问题。在 containerCommand 被取消注释之前。出于某种原因,对于 nginx 容器,不应该包含 containerCommand,因为它只是神奇地启动了,但是当你像我一样添加它时,它就会失败。我通过在它旁边添加 # 符号将其注释掉。
inputs:
azureSubscription: 'dpt-service-1'
appName: 'dev-dpt-my-website-app-service'
deployToSlotOrASE: true
resourceGroupName: 'dev-dpt-rg'
# Do not set this to production only use slot<number>
slotName: 'production'
imageName: 'devdptAcr.azurecr.io/dpt-images:$(smallTag)'
# containerCommand: 'docker run -p 80:80 $(smallTag)'
我构建了一个 React 应用程序,并创建了一个使用 nginx 图像的 docker 文件。我可以在本地构建 运行 docker 容器,它成功地为我的 React 应用程序提供服务。但是,当我尝试将其部署到 azure 应用程序服务时,由于某种原因它失败了。在 logstream 的日志中,它只是说“您的容器无法启动”让我感到困惑的是,我正在以与我成功部署数百个 java 容器的方式非常相似的方式部署它 运行ning弹簧启动应用程序。在这种情况下我没问题,但出于某种原因,我花了几天时间才让这个 nginx/react 应用程序在应用程序服务上运行。
我正在使用 Terraform 配置应用程序服务。代码如下所示。
resource "azurerm_app_service_plan" "dpt_appservice_plan" {
name = "${var.ENVIRONMENT}-dpt-app-service-plan"
location = azurerm_resource_group.dpt_rg.location
resource_group_name = azurerm_resource_group.dpt_rg.name
kind = "Linux"
reserved = true
sku {
tier = "Basic"
size = "S1"
}
}
resource "azurerm_app_service" "dpt_my_website_app_service" {
name = "${var.ENVIRONMENT}-dpt-my-website-app-service"
location = azurerm_resource_group.dpt_rg.location
resource_group_name = azurerm_resource_group.dpt_rg.name
app_service_plan_id = azurerm_app_service_plan.dpt_appservice_plan.id
site_config {
always_on = false
linux_fx_version = "DOCKER|${var.ENVIRONMENT}<acr>.azurecr.io/<registry>:latest"
}
app_settings = {
DOCKER_REGISTRY_SERVER_URL = "https:# acr.azurecr.io"
DOCKER_REGISTRY_SERVER_USERNAME = azurerm_container_registry.dpt_acr.admin_username
DOCKER_REGISTRY_SERVER_PASSWORD = azurerm_container_registry.dpt_acr.admin_password
WEBSITES_PORT = 8080
WEBSITES_CONTAINER_START_TIME_LIMIT = 300
}
}
我构建 React 应用程序并从构建目录中取出内容并将它们放入 nginx 容器中
FROM nginx
COPY build /usr/share/nginx/html
COPY docker/default.conf /etc/nginx/conf.d/default.conf
EXPOSE 8080 80
ENTRYPOINT ["nginx", "-g", "daemon off;"]
有人知道将带有 React 应用程序的 nginx 容器部署到 Azure 应用程序服务的正确方法吗?
那里发布的所有代码都是正确的。我通过更改 azure-pipelines 文件解决了这个问题。在 containerCommand 被取消注释之前。出于某种原因,对于 nginx 容器,不应该包含 containerCommand,因为它只是神奇地启动了,但是当你像我一样添加它时,它就会失败。我通过在它旁边添加 # 符号将其注释掉。
inputs:
azureSubscription: 'dpt-service-1'
appName: 'dev-dpt-my-website-app-service'
deployToSlotOrASE: true
resourceGroupName: 'dev-dpt-rg'
# Do not set this to production only use slot<number>
slotName: 'production'
imageName: 'devdptAcr.azurecr.io/dpt-images:$(smallTag)'
# containerCommand: 'docker run -p 80:80 $(smallTag)'