首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Docker-compose api和数据库配置

Docker-compose api和数据库配置
EN

Stack Overflow用户
提问于 2020-02-19 14:52:32
回答 1查看 1.3K关注 0票数 0

我在连接Api和运行在容器中的MySQL数据库时遇到了一个问题。我有Golang Api的Dockerfile:

代码语言:javascript
运行
复制
FROM golang:latest
 WORKDIR /app
 COPY go.mod go.sum ./
RUN go mod download
 COPY . .
WORKDIR /app/bin
 EXPOSE 8080
 RUN go run ./../cmd/web/

我通常使用数据库/sql连接应用程序中的数据库:

代码语言:javascript
运行
复制
dsn = "user1:pass@tcp(wpmysql:3306)/wp?parseTime=true"
db, err := sql.Open("mysql", dsn)

我的docker-compose.yml:

代码语言:javascript
运行
复制
version: '3'
services:
  db:
    image: mysql:5.7
    container_name: ${MYSQL_CONTAINER_NAME}
    ports: 
        - 3306:3306
    command: --init-file /usr/src/app/init.sql
    volumes:
        - ./init.sql:/usr/src/app/init.sql
    environment:
        - MYSQL_USER=${MYSQL_USER}
        - MYSQL_PASSWORD=${MYSQL_PASS}
        - MYSQL_DATABASE=${MYSQL_DB}
        - MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
    networks:
        - fullstack
  web:
    container_name: wpapi
    build: .
    ports:
        - 8080:8080
    restart: on-failure
    volumes:
        - .:/usr/src/app/
    depends_on:
        - db
    networks:
        - fullstack

networks:
    fullstack:
        driver: bridge

在与docker-compose.yml相同的目录中有文件.env:

代码语言:javascript
运行
复制
DB_PASSWORD=pass
MYSQL_PORT=3306
MYSQL_USER=user1
MYSQL_PASS=pass
MYSQL_DB=wp
MYSQL_CONTAINER_NAME=wpmysql

After call推荐:

代码语言:javascript
运行
复制
$ docker-compose up -d db
$ docker-compose build web

我得到了error ERROR main.go:46: dial tcp: lookup wpmysql on 37.8.214.2:53: no such host。容器列表如下所示:

代码语言:javascript
运行
复制
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
9fbaf67df5bf        2778fcda2046        "/bin/sh -c 'go run …"   14 seconds ago      Up 13 seconds       8080/tcp                            mystifying_shannon
7f6c76cc9c4f        mysql:5.7           "docker-entrypoint.s…"   40 minutes ago      Up About a minute   0.0.0.0:3306->3306/tcp, 33060/tcp   wpmysql

此外,当我尝试在应用程序中通过dsn = "user1:pass@tcp(localhost:3306)/wp?parseTime=true"dsn = "root:pass@tcp(localhost:3306)/wp?parseTime=true"连接时,我得到了另一个错误:dial tcp 127.0.0.1:3306: connect: connection refused,尽管我可以使用rootuser1凭据进入容器(docker exec -it wpmysql bash -l)和sign in

EN

Stack Overflow用户

回答已采纳

发布于 2020-02-19 16:44:06

在您的docker文件中,您具有:

RUN go run ./../cmd/web/

这将尝试在构建过程中构建并运行可执行文件。网络fullstack此时不可用。我想你的意思可能是:

CMD go run ../cmd/web/

这会将启动(即docker-compose up)容器时运行的默认命令设置为go run ../cmd/web/。更好的方法是:

代码语言:javascript
运行
复制
RUN go build ../cmd/web/
CMD ../cmd/web/web

这将在构建容器的过程中构建您的应用程序,然后将生成的可执行文件设置为默认命令。这样做的好处是,编译错误在构建映像时变得明显(这意味着不是每次启动容器时都会构建应用程序)。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60294576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档