我正在尝试以下操作:
我的想法是我需要我的测试在不同的数据库版本上运行。
为此,我需要能够与golang容器中的每个sql容器进行对话。
我试过的:
方法1-使用--link:
docker run --name mysql55c -p 127.0.0.1:4200:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.5
GO LANG应用程序容器
docker run -w /go/src/app -it --link mysql55c -d --name golangapp -v $(pwd):/go/src/app golang bash -c "go get github.com/go-sql-driver/mysql;go build main.go; go test -v
--config ./config.ini"
方法2-使用--net(网桥和主机):创建网桥nw
docker网络mynw
docker run --name mysql55c --net mynw -p 127.0.0.1:4200:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.5
GO LANG应用程序容器
docker run -w /go/src/app -it --net mynw -d --name golangapp -v $(pwd):/go/src/app golang bash -c "go get github.com/go-sql-driver/mysql;go build main.go; go test -v
--config ./config.ini"
而不是创造一个自己的桥梁网络,我也累了
--NET主机
使用配置url连接到数据库的Go代码
func dbconn() (*sql.DB, error) {
opendb, err := sql.Open("mysql", *dsn + *dbname) //coming from flag
if err != nil {
return nil, err
}
return opendb, nil
}
我在配置中尝试过的dsn url组合:
>
DSN=“root:root@TCP(172.17.0.0.x:4200)/”(docker0 ip)
DBNAME=“SOMENAME”
这应该起作用,请遵循以下步骤:
Docker运行--name mysql55c-p 4200:3306-e mysql_root_password=root-d mysql:5.5
DockerFile
:FROM golang:latest
COPY . /
RUN go get "github.com/go-sql-driver/mysql"
CMD go run /main.go
main.go
:package main
import(
_ "github.com/go-sql-driver/mysql"
"database/sql"
"log"
)
func main() {
// Open up our database connection.
db, err := sql.Open("mysql", "root:root@tcp(192.168.0.33:4200)/mysql")
// if there is an error opening the connection, handle it
if err != nil {
log.Print(err.Error())
} else {
log.Print("DB connected successfully")
}
defer db.Close()
}
$ docker logs dbd5294abd61
2019/06/19 13:24:17 DB connected successfully
注意:我运行的是mysql容器,它暴露在主机的4200端口上。在golang代码中,我的连接字符串是root:root@tcp(192.168.0.33:4200)/mysql
,其中192.168.0.33
是我计算机的私有ip。
对于您来说,最重要的是您的db连接字符串应该指向您主机的私有/公共ip。如果您在没有容器链接的情况下运行golang。
如果在运行golang时使用容器链接,假设Docker run-itd--link mysql55c:mydb goapp
,则您的golang代码中的mysql连接字符串应为root:root@tcp(mydb:4200)/mysql
试试这个告诉我。
问题内容: 我基于两个不同的图像创建了两个docker容器。一个数据库,另一个用于网络服务器。这两个容器都在我的Mac OS X上运行。 我可以从主机访问数据库容器,也可以从主机访问Web服务器。 但是,如何从Web服务器访问数据库连接? 我启动数据库容器的方式是 我开始了wls容器作为 我可以通过连接到主机上的数据库 我可以以以下方式访问主机上的wls: 问题答案: 最简单的方法是使用–link
我基于两个不同的映像创建了两个docker容器。一个是db,另一个是WebServer。这两个容器都在我的mac OSX上运行。 我可以从主机访问db容器,也可以从主机访问webserver。 我可以访问主机上的wls作为
问题内容: 我正在尝试为将我的应用程序容器连接到postgres容器提供一个便携式解决方案。“便携式”是指我可以给用户两个命令,每个容器一个,它们将始终协同工作。 我的本地PC上运行着一个postgres docker容器,我这样运行它, 我可以使用address从python flask应用程序访问它。 我也将python应用程序也放置在docker容器中,但无法连接到postgres容器。 地
我有两个Docker容器在同一个网络中运行,我希望其中一个通过spring Webclient调用另一个。我确信他们都在同一个网络中- “finishConnect(…)失败:连接被拒绝:附件加载程序秒/172.21.0.5:80;嵌套异常为io。内蒂。频道AbstractChannel$AnnotatedConnect异常:finishConnect(…)失败:连接被拒绝:附件加载程序秒/172
我们有一个公开REST API的现有java应用程序。当它收到超文本传输协议请求时,它使用Runtime.getRuntime(). exe启动另一个java进程。 我们正在将此应用程序迁移到docker,我们希望将这些服务、一个容器中的REST应用程序和另一个容器中的其他组件分开。 有没有办法,REST应用程序可以在另一个docker容器中启动另一个应用程序?
问题内容: 目前,我在需要连接到camunda的docker容器内运行一个node.js应用程序,该容器在另一个容器中运行。 我使用以下命令启动容器 这两个应用程序现在都在运行,我可以通过在端口8000上导航到主机的IP来访问camunda,运行wget 还会返回camunda页面。使用和键入我的应用程序容器时,我无法访问camunda。相反,我得到以下错误: 当我使用将我的应用程序容器链接到ca