Docker容器没有';无法在Azure WebApps for Linux上正常工作,但它可以在本地工作。
我对docker的Azure Web应用程序(Linux预览)有一个问题 我用go lang编写了一个代理服务器,并通过Dockerfile打包。这个问题只是将jpeg转换成png格式。它在本地运行良好Docker容器没有';无法在Azure WebApps for Linux上正常工作,但它可以在本地工作。,linux,azure,docker,web-applications,Linux,Azure,Docker,Web Applications,我对docker的Azure Web应用程序(Linux预览)有一个问题 我用go lang编写了一个代理服务器,并通过Dockerfile打包。这个问题只是将jpeg转换成png格式。它在本地运行良好 package main import ( "net/http" "github.com/labstack/echo" "io" "image" "image/jpeg" "image/png" "log" ) func main()
package main
import (
"net/http"
"github.com/labstack/echo"
"io"
"image"
"image/jpeg"
"image/png"
"log"
)
func main() {
e := echo.New()
e.GET("/convertedimage", func(c echo.Context) error {
source := c.QueryParam("url")
log.Printf(source)
response, err := http.Get(source)
if err != nil {
panic(err)
}
defer response.Body.Close()
log.Printf(response.Header.Get("Content-type"));
if response.Header.Get("Content-type") == "image/jpeg" {
jpegImage := ImageRead(response.Body)
pr, pw := io.Pipe()
go func() {
err = png.Encode(pw, jpegImage)
pw.Close()
}()
return c.Stream(http.StatusOK, "image/png", pr)
} else {
return c.Stream(http.StatusOK, "image/png", response.Body)
}
})
e.Logger.Fatal(e.Start(":80"))
}
func ImageRead(inputImage io.ReadCloser) (image image.Image) {
img, err := jpeg.Decode(inputImage)
if err != nil {
log.Fatal(err)
}
inputImage.Close()
return img
}
我也像这样通过Docker文件打包
FROM golang:1.7.5
ADD server.go .
RUN go get -u github.com/labstack/echo
RUN go build server.go
ENTRYPOINT ./server
EXPOSE 80
http://localhost:8093/convertedimage?url=https%3A%2F%2Fc.s-microsoft.com%2Fja-jp%2FCMSImages%2Fspk-ushio.jpg%3Fversion%3Df6328834-736f-4b59-2f85-7b198346ef4d
-> (I can see a png image on my browser.)
然而,当我在Azure web应用程序(linux预览版)上部署它时,它就不起作用了
$ go build server.go
$ docker build . -t tsuyoshiushio/imageconvertproxy
$ docker push tsuyoshiushio/imageconvertproxy
$ docker run -p 8093:80 tsuyoshiushio/imageconvertproxy
像这样通过浏览器调用也可以
FROM golang:1.7.5
ADD server.go .
RUN go get -u github.com/labstack/echo
RUN go build server.go
ENTRYPOINT ./server
EXPOSE 80
http://localhost:8093/convertedimage?url=https%3A%2F%2Fc.s-microsoft.com%2Fja-jp%2FCMSImages%2Fspk-ushio.jpg%3Fversion%3Df6328834-736f-4b59-2f85-7b198346ef4d
-> (I can see a png image on my browser.)
然而,如果我将其部署在Azure web应用程序上,它将完全无法工作
https://imageproxy.azurewebsites.net/convertedimage?url=https%3A%2F%2Fc.s-microsoft.com%2Fja-jp%2FCMSImages%2Fspk-ushio.jpg%3Fversion%3Df6328834-736f-4b59-2f85-7b198346ef4d
-> {"message":"Not Found"}
这与worng url的行为相同。但是docker容器本身正在成功地工作
现在我们不能让docker exec或docker登录到Web应用程序的容器中,我不知道如何解决这个问题。您有什么办法解决这个问题吗?您的容器公开端口8093,但默认情况下应用程序服务使用端口80。幸运的是,此设置是可配置的 转到应用程序设置并添加名为PORT的设置,然后将其设置为8093。更多信息请参考此 更新:
我注意到您使用https访问web,端口是443,而不是80。请尝试使用http并再次测试。请注意,MS()的官方常见问题解答让人认为您只需将端口设置为容器公开的端口,端口应用程序设置将被删除,但它仍在大量使用中,因此可以肯定,将端口和端口都设置为容器公开的端口。
请注意,无论容器公开哪个端口,您都可以通过端口80访问HTTP,通过端口443访问HTTPS。谢谢!我在应用程序服务上公开了80。不是8093。这不是应用服务防火墙的问题。因为我得到了消息“{”message:“notfound”}”,这个json是从我的容器中的go服务器返回的。当我这样做的时候,这个json是相同的症状。对:。。。。错误:您可以使用
http://localhost/convertedimage?url=https%3A%2F%2Fc.s-microsoft.com%2Fja jp%2FCMSImages%2Fspk ushio.jpg%3f版本%3Df6328834-736f-4b59-2f85-7b198346ef4d
?您好,您是否尝试http
而不是https
?您好,我注意到您使用https
访问您的web,端口是443,不是80。如果可能的话,我建议您可以尝试再次使用http
测试。太好了!就是这样!谢谢我不知道我为什么使用https。行动!