Table des matières
Contenu de la question
Solution de contournement
Maison développement back-end Golang Fichier docker Golang chromedp

Fichier docker Golang chromedp

Feb 09, 2024 am 10:09 AM
golang开发

Golang chromedp dockerfile

Dans le développement de logiciels modernes, Docker est devenu un outil indispensable, qui peut aider les développeurs à créer, déployer et gérer rapidement des applications. En tant que langage de programmation efficace et concis, Golang est également privilégié par les développeurs. Alors, comment développer des applications en utilisant Golang dans Docker ? Cet article explique comment écrire un Dockerfile pour une application Golang et utiliser la bibliothèque chromedp pour implémenter des tests Web automatisés. Si vous êtes intéressé par les tests automatisés Golang, Docker et Web, vous souhaiterez peut-être continuer à lire.

Contenu de la question

J'ai un code Golang qui utilise chromedp pour se connecter au chrome local de l'utilisateur Voici mon code :

package main

import (
    "context"
    "fmt"
    "log"
    "os"
    "time"

    "github.com/chromedp/chromedp"
    "github.com/gin-gonic/gin"
)

func main() {
    api := gin.default()

    api.get("api/jwt", func(c *gin.context) {
        opts := append(chromedp.defaultexecallocatoroptions[:],
            chromedp.flag("headless", false),
            chromedp.flag("disable-gpu", true),
            chromedp.flag("no-sandbox", true),
            chromedp.flag("disable-dev-shm-usage", true),
            chromedp.flag("disable-browser-side-navigation", true),
            chromedp.flag("disable-infobars", true),
            chromedp.flag("disable-extensions", true),
            chromedp.flag("disable-notifications", true),
            chromedp.flag("disable-default-apps", true),
            chromedp.flag("disable-background-timer-throttling", true),
            chromedp.flag("disable-backgrounding-occluded-windows", true),
            chromedp.flag("disable-renderer-backgrounding", true),
        )

        allocctx, cancel := chromedp.newexecallocator(context.background(), opts...)
        defer cancel()

        ctx, cancel := chromedp.newcontext(allocctx)
        defer cancel()

        var localstoragedata string // declaração da variável localstoragedata

        err := chromedp.run(ctx,
            chromedp.navigate("https://csonlinetenant.b2clogin.com/csonlinetenant.onmicrosoft.com/oauth2/v2.0/authorize"),
            chromedp.sleep(5*time.second),
            chromedp.waitvisible(`#fgh`),
            chromedp.sendkeys(`#fghfg`, "fghfgh"),
            chromedp.sendkeys(`#xcvxcv`, "xcxcvcxv"),
            chromedp.click(`#thgh`, chromedp.byid),
            chromedp.sleep(5*time.second),
            chromedp.click(`dfgd`, chromedp.byid),
            chromedp.sleep(15*time.second),
            chromedp.evaluateasdevtools(`localstorage.getitem('c')`, &localstoragedata),
        )
        if err != nil {
            log.printf("error: %v", err)
            return
        }

        fmt.println("bearer", localstoragedata)

        // restante do código...

        c.json(200, gin.h{
            "success": localstoragedata,
        })
    })

    listenaddr := os.getenv("listen")

    if val, ok := os.lookupenv("functions_customhandler_port"); ok {
        listenaddr = ":" + val
    }
    if listenaddr == "" {
        listenaddr = ":8080"
    }

    api.run(listenaddr)
}
Copier après la connexion

J'ai donc créé un fichier docker avec ce dont mon client a besoin pour utiliser cette application (j'ai installé Chrome et construit mon golang dans l'image)

fichier docker :

from golang:1.20 as build-stage

workdir /app

# instale as dependências do chrome
run wget -q -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list
run apt-get update && apt-get -y install google-chrome-stable
run chrome &


copy go.mod go.sum ./
run go mod download

copy *.go ./

run cgo_enabled=0 goos=linux go build -o /dockergo

# run the tests in the container
from build-stage as run-test-stage
run go test -v ./...

# deploy the application binary into a lean image
from gcr.io/distroless/base-debian11 as build-release-stage

workdir /

copy --from=build-stage /dockergo /dockergo

expose 8080

user nonroot:nonroot

entrypoint ["/dockergo"]
Copier après la connexion

Image construite avec succès et sans maux de tête Mais lorsque je teste l'image Docker localement, j'obtiens cette erreur :

Error: exec: "google-chrome": executable file not found in $PATH
Copier après la connexion

Que signifie cette erreur ? Mon Chrome ne fonctionne pas ? Comment puis-je l'exécuter ?

Solution de contournement

Le navigateur Chrome est uniquement installé et n'est pas disponible dans l'image finale créée build-stage中。它在 build-release-stage.

J'essaie d'installer Chrome en utilisant ce fichier docker :

# deploy the application binary into a lean image
from gcr.io/distroless/base-debian11 as build-release-stage

run wget -q -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list
run apt-get update && apt-get -y install google-chrome-stable
run chrome &
Copier après la connexion

Mais cela échoue avec le message suivant :

...
step 2/4 : run wget -q -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -     && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list
 ---> running in 7596202a5684
failed to create shim task: oci runtime create failed: runc create failed: unable to start container process: exec: "/bin/sh": stat /bin/sh: no such file or directory: unknown
Copier après la connexion

Je pense que vous devez choisir une autre image de base sur laquelle vous pouvez facilement installer Chrome. Une meilleure option consiste à exécuter les tests en utilisant l'image chromedp/headless-shell 作为基础镜像。该图像包含 chrome 的无头 shell,该 shell 非常小。下面的演示 dockerfile 还显示了首先编译测试二进制文件,然后在 chromedp/headless-shell : 

FROM golang:1.20.5-buster AS build-stage

WORKDIR /app

COPY go.mod go.sum ./
RUN go mod download

COPY . .

RUN CGO_ENABLED=0 go build -o dockergo
# Build the test binary
RUN CGO_ENABLED=0 go test -c -o dockergo.test

# Run the tests in the container
FROM chromedp/headless-shell:114.0.5735.199 AS run-test-stage

WORKDIR /app
# Copy other files that is needed to run the test (testdata?).
COPY . .
COPY --from=build-stage /app/dockergo.test ./dockergo.test
RUN /app/dockergo.test -test.v

# Deploy the application binary into a lean image
FROM chromedp/headless-shell:114.0.5735.199 AS build-release-stage

COPY --from=build-stage /app/dockergo /dockergo

EXPOSE 8080

ENTRYPOINT ["/dockergo"]
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Défis de sécurité dans le développement de Golang : Comment éviter d'être exploité pour la création de virus ? Défis de sécurité dans le développement de Golang : Comment éviter d'être exploité pour la création de virus ? Mar 19, 2024 pm 12:39 PM

Défis de sécurité dans le développement de Golang : Comment éviter d'être exploité pour la création de virus ? Avec la large application de Golang dans le domaine de la programmation, de plus en plus de développeurs choisissent d'utiliser Golang pour développer différents types d'applications. Cependant, comme pour d’autres langages de programmation, le développement de Golang présente des problèmes de sécurité. En particulier, la puissance et la flexibilité de Golang en font également un outil potentiel de création de virus. Cet article abordera les problèmes de sécurité dans le développement de Golang et fournira quelques méthodes pour éviter G.

Développez des applications de bureau puissantes à l'aide de Golang Développez des applications de bureau puissantes à l'aide de Golang Mar 19, 2024 pm 05:45 PM

Utilisez Golang pour développer des applications de bureau puissantes. Avec le développement continu d'Internet, les utilisateurs sont devenus indissociables de différents types d'applications de bureau. Pour les développeurs, il est crucial d’utiliser des langages de programmation efficaces pour développer des applications bureautiques puissantes. Cet article explique comment utiliser Golang (langage Go) pour développer des applications de bureau puissantes et fournit des exemples de code spécifiques. Golang est un langage de programmation open source développé par Google. Il présente les caractéristiques de simplicité, d'efficacité, de forte concurrence, etc., et convient parfaitement.

Étapes et conseils pour programmer avec Golang sur Mac Étapes et conseils pour programmer avec Golang sur Mac Mar 03, 2024 am 08:30 AM

Titre : Étapes et techniques d'utilisation de la programmation Golang sur Mac Dans le domaine actuel du développement logiciel, Golang (également connu sous le nom de Go), en tant que langage de programmation efficace, concis et hautement simultané, a attiré l'attention de plus en plus de développeurs. . Lors de la programmation de Golang sur la plate-forme Mac, vous pouvez utiliser certains outils et techniques pour améliorer l'efficacité du développement. Cet article présentera les étapes et les techniques d'utilisation de la programmation Golang sur Mac et fournira des exemples de code spécifiques pour aider les lecteurs à mieux comprendre et appliquer. Étape 1 : Installer Gol

Quels langages de programmation sont couramment utilisés par les développeurs Golang ? Quels langages de programmation sont couramment utilisés par les développeurs Golang ? Mar 18, 2024 pm 09:06 PM

Golang est un langage de programmation open source développé par Google et est largement utilisé dans le développement de services back-end, le cloud computing, la programmation réseau et d'autres domaines. En tant que langage typé statiquement, Golang dispose d'un modèle de concurrence efficace et d'une puissante bibliothèque standard, il est donc privilégié par les développeurs. Cependant, dans le développement réel, les développeurs Golang doivent généralement combiner d'autres langages de programmation pour le développement de projets afin de répondre aux besoins de différents scénarios. PythonPython est un langage de programmation orienté objet concis, clair et facile à apprendre.

Le framework Go Kit aide à améliorer les performances de l'API Golang Le framework Go Kit aide à améliorer les performances de l'API Golang May 07, 2024 pm 03:24 PM

Gokit est un framework de microservices Golang qui améliore les performances des API grâce à des fonctionnalités optimisées, évolutives, maintenables et conviviales pour les tests. Il fournit une gamme d'outils et de modèles qui permettent aux utilisateurs de créer rapidement des API performantes et maintenables. En production réelle, il est largement utilisé dans la construction d’API de grandes plateformes telles que Netflix, Spotify et Uber, traitant des requêtes massives.

Recherche sur l'impact et le rôle de Golang sur le développement de la blockchain Recherche sur l'impact et le rôle de Golang sur le développement de la blockchain Feb 26, 2024 pm 04:24 PM

Golang (langage Go en abrégé) en tant que langage de programmation a progressivement émergé dans le domaine de la blockchain ces dernières années. Ses capacités de traitement simultané efficaces et ses fonctionnalités de syntaxe concises en font un choix privilégié dans le développement de la blockchain. Cet article explorera comment Golang aide au développement de la blockchain et démontrera sa supériorité dans les applications blockchain à travers des exemples de code spécifiques. 1. Avantages de Golang dans le domaine de la blockchain : Capacités de traitement simultanées efficaces : les nœuds du système blockchain doivent traiter une grande quantité de transactions et de données en même temps, et Gola

Avantages et inconvénients de l'utilisation de Golang pour développer des jeux mobiles Avantages et inconvénients de l'utilisation de Golang pour développer des jeux mobiles Mar 05, 2024 pm 03:51 PM

Avantages et inconvénients de l'utilisation de Golang pour développer des jeux mobiles Avec la popularité des appareils mobiles et l'amélioration continue de leurs performances, le marché des jeux mobiles devient de plus en plus populaire, attirant de plus en plus de développeurs à le rejoindre. Lors du choix d'un langage de développement, Golang, en tant que langage rapide, efficace et facile à apprendre, attire l'attention de nombreux développeurs. Cet article discutera des avantages et des inconvénients de l'utilisation de Golang pour développer des jeux mobiles et l'illustrera à travers des exemples de code spécifiques. Avantages : Forte multiplateforme : Golang peut être compilé en binaires pour différentes plates-formes

Analyse de faisabilité de l'utilisation de Golang pour développer des projets U3D Analyse de faisabilité de l'utilisation de Golang pour développer des projets U3D Mar 20, 2024 pm 02:30 PM

Titre : Analyse de faisabilité de l'utilisation de Golang pour développer des projets U3D Avec le développement continu de l'industrie du développement de jeux, Unity3D (U3D en abrégé), en tant que moteur de jeu largement utilisé, fournit aux développeurs des outils et un support puissants. Dans les applications réelles, les développeurs souhaitent également utiliser d'autres langages de programmation pour développer des projets U3D. Cet article analysera la faisabilité de l'utilisation de Golang pour développer des projets U3D et fournira quelques exemples de code spécifiques. 1. Combinaison de Golang et U3D Go

See all articles