我有 2 台服务器,A并且B.
它们都运行以go. 在 上Server B,我还有一个正在运行的数据库。. 中的服务器和数据库docker-containers。
docker-compose.yml
...
userDB:
image: mysql:oracle
restart: always
container_name: userDB
environment:
MYSQL_DATABASE: 'mydb'
MYSQL_USER: 'user'
MYSQL_PASSWORD: 'mypw
MYSQL_ROOT_PASSWORD: 'myrootpw'
cap_add:
- SYS_NICE
ports:
- '3307:3306'
networks:
- dbnet
...
go_rest:
build:
context: .
dockerfile: ./goREST/Dockerfile
container_name: go_rest
command: ["./goREST"]
restart: always
ports:
- 8081:8081
networks:
- dbnet
在服务器内部,我像这样连接到数据库:
db, err := sql.Open("mysql", "root:myrootpw@tcp(bbb.bbb.bbb.bbb:3307)/mydb")
var usr DBUser
stmt, _ := db.Prepare(`SELECT * from user;`)
_ = stmt.QueryRow().Scan(&usr.SteamId)
log.Println(*usr.SteamId)
请注意,这bbb.bbb....是我的公共 IP Server B。
现在的问题是:
Server A在(没有数据库)上运行服务器应用程序,工作正常。我还可以使用以下命令从我的开发机器连接到数据库:
ssh -L 3307:127.0.0.1:3307 usr@bbb.bbb.bbb.bbb
但是在保存数据库的机器上使用 dockerized 版本时,我无法连接到数据库?这只会发生,当在 docker 中运行时,当我像./goReston一样运行可执行文件时Server B,它也可以正常工作。我真的很困惑。
如果我的解释令人困惑:
A -----> B(docker) works
B -----> B(local) works
B -----> B(docker) doesn not work
(docker) referes to the server-application. The database is always dockerized.
操作系统:Ubuntu 20.04LTS
噜噜哒
慕标5832272