--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。