2017-03-21 21 views
0

ドッカーの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ログが記録されないため、この問題を解決することはできません。これを解決するためのアイディアはありますか?

答えて

0

あなたのコンテナはポート8093を公開しますが、デフォルトではApp Serviceはポート80を使用します。幸いなことに、この設定は構成可能です。

アプリケーション設定に移動し、PORTという名前の設定を追加し、8093に設定します。詳細はlinkを参照してください。

アップデート:私はあなたがhttpsを使用してWebにアクセスすることを

気づく、ポートは80が再びhttpとテストを使用しようとしないで、443です。

+0

ありがとうございました!私はAppサービスで80を公開します。これはApp Serviceのファイアウォールの問題ではありません。私はメッセージ '{"message": "Not Found"}'を取得しています。このjsonは、自分のコンテナ内のgoサーバから戻ってきました。 このjsonは私がこれを好きなときと同じ症状です。 true:http:// localhost:8093/convertedimage?url = .... false:http:// localhost:8093/wrongone?url = – sandayuu

+0

あなたは 'http:// localhost/convertedimage? url = https%3A%2F%2Fc.s-microsoft.com%2Fja-jp%2FCMSImages%2Fspk-ushio.jpg%3Fversion%3Df6328834-736f-4b59-2f85-7b198346ef4d'? –

+0

こんにちは、 'https'ではなく' http'を試してみませんか? –

0

MSの公式FAQ(https://docs.microsoft.com/en-us/azure/app-service/containers/app-service-linux-faq)では、WEBSITES_PORTをコンテナが公開しているポートに設定するだけで、PORTアプリケーションの設定は無効にする必要があると考えられますが、必ずWEBSITES_PORTとPORTの両方を、コンテナが公開するポートに設定してください。 コンテナが公開するポートに関係なく、HTTPの場合はポート80で、HTTPSの場合は443でWebアプリケーションにアクセスします。

関連する問題