J'ai une application très simple. Voici le code:Impossible d'exécuter l'application Go (lang) à partir de l'image du docker sur le docker-machine (boîte virtuelle)
package main
import (
"fmt"
"math/rand"
"time"
"net/http"
"encoding/base64"
"encoding/json"
)
type Message struct {
Text string `json:"text"`
}
var cookieQuotes = []string{
// Skipped all the stuff
}
const COOKIE_NAME = "your_cookie"
func main() {
http.HandleFunc("/set_cookie", setCookie)
http.HandleFunc("/get_cookie", getCookie)
http.Handle("/favicon.ico", http.NotFoundHandler())
http.ListenAndServe(":8080", nil)
}
func setCookie(w http.ResponseWriter, r *http.Request) {
quote := getRandomCookieQuote()
encQuote := base64.StdEncoding.EncodeToString([]byte(quote))
http.SetCookie(w, &http.Cookie{
Name: COOKIE_NAME,
Value: encQuote,
})
}
func getCookie(w http.ResponseWriter, r *http.Request) {
cookie, err := r.Cookie(COOKIE_NAME)
if err != nil {
fmt.Fprintln(w, "Cannot get the cookie")
}
message, _ := base64.StdEncoding.DecodeString(cookie.Value)
msg := Message{Text:string(message)}
fmt.Println(msg.Text)
respBody, err := json.Marshal(msg)
fmt.Println(string(respBody))
if err != nil {
fmt.Println("Cannot marshall JSON")
}
w.Header().Set("Content-Type", "application/json")
fmt.Fprintln(w, string(respBody))
}
func getRandomCookieQuote() string {
source := rand.NewSource(time.Now().UnixNano())
random := rand.New(source)
i := random.Intn(len(cookieQuotes))
return cookieQuotes[i]
}
Il a été testé localement, et j'ai aussi essayé de courir un conteneur docker avec sur ma machine (Ubuntu) et il fonctionnait parfaitement. Mais je veux l'exécuter sur Virtual Machine (j'utilise Oracle Virtual Box).
Alors, je l'ai installé docker-machine:
Version docker machine 0.12.2, construire 9371605
Après cela, je l'ai commuté, comme il a été recommandé dans official documentation comme ceci:
eval "$ (par défaut env docker machine)"
Donc, je peux le faire maintenant du point de vue de cette machine.
Aussi j'ai essayé de courir ngnix de l'exemple de la documentation:
docker run -d -p 8000: 80 nginx
boucle $ (par défaut ip docker machine): 8000
Et j'obtenir le résultat, je peux arriver à ngnix page d'accueil en accédant à ma machine docker ip adresse qui est accessible par la commande:
ip docker machine par défaut
Mais lorsque je tente de lancer ma propre image docker, je ne pouvais pas le faire. Lorsque je tente d'y accéder, je reçois:
boucle $ (par défaut ip docker machine): 8080
boucle: (7) Impossible de se connecter à 192.168.99.100 port 8080: Connexion refusée
J'ai aussi essayé d'ignorer un port, d'ajouter un protocole (http, et même https pour la chance) - rien ne fonctionne.
Peut-être que quelque chose ne va pas dans mon Dockerfile?
# Go experiments with cookies
FROM golang:1.8-onbuild
MAINTAINER [email protected]
Pourriez-vous m'aider s'il vous plaît?
À quoi ressemble 'Dockerfile' comme? Est-ce que ces deux lignes sont tout ce qu'il y a dedans? – Carpetsmoker
Oui, monsieur! C'est tout et ça a parfaitement fonctionné dans mon environnement local – SanchelliosProg
à quoi ressemble votre commande 'docker run'? Avez-vous mappé le port correctement? – tanyehzheng