ドッカーのAzure Webアプリケーション(Linuxプレビュー)の問題があります。Dockerコンテナは、Azure WebApps for 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
ただし、Azure Webアプリケーション(Linuxプレビュー)に展開すると機能しません。
$ go build server.go
$ docker build . -t tsuyoshiushio/imageconvertproxy
$ docker push tsuyoshiushio/imageconvertproxy
$ docker run -p 8093:80 tsuyoshiushio/imageconvertproxy
このようにブラウザで通話すると問題はありません。
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.)
Howerver、Azureウェブアプリケーションにデプロイすると、全く動作しません。
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と同じ動作です。しかし、ドッカーのコンテナ自体は正常に動作しています。
これで、Webアプリケーションのコンテナにdockerのexecまたはdockerログが記録されないため、この問題を解決することはできません。これを解決するためのアイディアはありますか?
ありがとうございました!私はAppサービスで80を公開します。これはApp Serviceのファイアウォールの問題ではありません。私はメッセージ '{"message": "Not Found"}'を取得しています。このjsonは、自分のコンテナ内のgoサーバから戻ってきました。 このjsonは私がこれを好きなときと同じ症状です。 true:http:// localhost:8093/convertedimage?url = .... false:http:// localhost:8093/wrongone?url = – sandayuu
あなたは 'http:// localhost/convertedimage? url = https%3A%2F%2Fc.s-microsoft.com%2Fja-jp%2FCMSImages%2Fspk-ushio.jpg%3Fversion%3Df6328834-736f-4b59-2f85-7b198346ef4d'? –
こんにちは、 'https'ではなく' http'を試してみませんか? –