GO应用程序(在Docker容器中)不反映页面上的更改?

问题描述 投票:0回答:2
--build

,即使在清除浏览器缓存并使用Incognito窗口后,更改也不会反映在页面上。但是,如果我运行

up
,则将反映更改。 reminder我是新手,但是这种正常行为吗?我是否必须每次重新构建项目才能查看更改?还是您在我的代码中看到了任何“关闭”的东西?我正在关注几岁的Udemy课程,所以当然,每一步都有一个新的“事物”要进行故障排除,因为它无法正常工作,如显示的
眼滚
他们建议使用

"Hello, World!"

用于热弹加载,我也遇到了问题,因为它也无法正常工作,但是我已经为此打开了一个github问题。

这里是各种文件的代码:
main.go

docker-compose up

dockerfile


docker-compose up --build

docker-compose.yaml


docker-compose

SRC>数据库>db.go

Air

SRC>模型>user.go

package main import ( "ambassador/src/database" "github.com/gofiber/fiber/v2" ) func main() { // Connect to the database database.Connect() // Migrate tables in the database database.AutoMigrate() // Create a new fiber app, which is based on Express.js app := fiber.New() app.Get("/", func(c *fiber.Ctx) error { return c.SendString("Hello, World!") }) app.Listen(":3000") }

Go.mod

FROM golang:1.19 WORKDIR /app COPY go.mod . COPY go.sum . RUN go mod download COPY . . # Use air for live go hot-reloading # This one doesn't work, use go install instead # RUN curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin # Air does not work for me. Opening github issue. Skip for now # RUN go install github.com/cosmtrek/air@latest # CMD ["air"] CMD ["go", "run", "main.go"]
在我的IDE的屏幕截图中包含相同的代码。
    

Go不是脚本语言,并且需要重建和重新启动应用程序应用更改

您可以使用Golang Fresh重建并重新启动您的应用
https://github.com/gravityblast/fresh

将其添加到您的dockerfile

version: '3.9'
services:
    backend:
        build: .
        ports:
            - 8000:3000
        # volumes:
        #   - .:/app
        depends_on:
            - db

    db:
        image: mysql:5.7.22
        restart: always
        environment:
            MYSQL_DATABASE: ambassador
            MYSQL_USER: root
            MYSQL_PASSWORD: root
            MYSQL_ROOT_PASSWORD: root
        volumes:
            - .dbdata:/var/lib/mysql
        ports:
            - 33066:3306

您没有将任何文件安装到您的容器中,只在图像构建中复制一次。这就是为什么除非构建或将新文件复制到容器中,否则您不会看到任何变化。 您已经评论了您的docker-compose.yaml的卷,但是如果您不按下这些行,您应该看到更改会反映而无需重建。

要回答您的原始问题 - 不,在运行Docker-Compose文件时,您不需要添加
package database import ( "ambassador/src/models" "gorm.io/driver/mysql" "gorm.io/gorm" ) var DB *gorm.DB func Connect() { var err error DB, err = gorm.Open(mysql.Open("root:root@tcp(db:3306)/ambassador"), &gorm.Config{}) if err != nil { panic("Could not connect with the database!") } } func AutoMigrate() { DB.AutoMigrate(models.User{}) }

标签。它无关,它仅与工作逻辑的Docker容器有关。 如果我们遇到了实时填充问题,那么问题是在技术码头的使用中用于主机系统和容器之间的文件共享。 当尝试使用Docker桌面时,我在Mac上遇到了相同的问题,而是像Rancher这样的替代方案,甚至通过 -Moby

使用Docker Cli。当我换回使用GRPC保险丝,OSXFS和Virtiofs的原始Docker桌面时 - 所有这些桌面都像Charm。
go docker-compose
2个回答
3
投票

LET检查我的.AIR.TOML文件。关键是空气支持用于文件系统更改的轮询模式。使用它而不是默认一个。

package models type User struct { Id uint FirstName string LastName string Email string Password string IsAmbassador bool }


    

1
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.