如何运行我的 main.go 文件而不必在容器之外单独运行它们?

我有一个main.go文件,用于运行一个应用程序,该应用程序启动一个服务器,该服务器公开一个端口,我可以从中运行端点。我试图将它 dockerise 并尽可能制作容纳应用程序和数据库的工作容器,但我似乎仍然必须在运行go run main.go后运行docker-compose up -d。


// present folder structure

.

├── cities.json // holds records of all city names

├── docker-compose.yaml 

├── dockerfile

├── go.mod

├── go.sum

├── localmon.sh // bash script that does a mongoimport to import all records from cities.json into the db

├── main.go

└── README.md

有人告诉我,我可能必须映射一个卷,知道它的位置并让它执行。另一种选择(更复杂)是 bash 脚本(或两者兼而有之?)


我有点不确定如何去做,或者我现在应该如何处理我的 compose 文件和 dockerfile。


version: '3.3'

services:

  db:

    hostname: mongo-test

    container_name: "mongo-test"

    image: mongo

    networks:

      - app_test

    ports: 

        - "8001:27017" 

    #   - "27017:27017"

    env_file: .env

    restart: unless-stopped

    volumes:

      - ".mongodata:/data/db"

  

  app: 

    hostname: app-test

    container_name: "app"

    build: 

      context: .

      dockerfile: dockerfile

    networks:

      - app_test

    ports: 

      - "54321:8080"

      # - "8080:8080"

    restart: unless-stopped

    env_file: .env


networks:

  app_test: {}

FROM golang:1.17.5-alpine3.15


RUN mkdir /app

ADD . /app

WORKDIR /app


# Copies and downloads necessary dependencies

COPY go.mod ./

COPY go.sum ./

RUN go mod download

RUN go build -o main .


# Port 8080 exposed for use

EXPOSE 8080


# Command that starts the container

CMD ["./main"]

env file that holds some DB related stuff for the main.go file to use.


DB_URI=mongodb://mongo-test:8001

CITY_DB=nht_cities

COL_USER=user

COL_CITY=city

USER_AUTH_TOKEN=50dba...

// localmon.sh


#! /bin/bash

mongoimport --host 192.168.0.101  --port 8001 --db nht_cities --collection city --type json --file ./cities.json 

docker-compose logs在运行最近的docker-compose up -d


慕的地8271018
浏览 246回答 1
1回答

婷婷同学_

请更改.env文件中的以下行:DB_URI=mongodb://mongo-test:8001至DB_URI=mongodb://mongo-test:27017docker compose up当您使用该命令启动容器时,它们会在同一个容器网络中运行。这意味着您需要指定容器端口而不是主机端口。容器端口在 Docker 王国中始终排在第二位:<host port>:<container port>.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go