Docker容器没有';无法在Azure WebApps for Linux上正常工作,但它可以在本地工作。

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()

我对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() {
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。行动!