1 回答
TA贡献1825条经验 获得超4个赞
所以我现在通过以下方式解决了它:
如此处所述: https ://docs.docker.com/compose/networking/
添加到 docker-compose:
networks: default: external: name: database_default
我可以在后端以 < db_container_name >:3306 的形式连接到数据库。
为了自动化这个过程,我创建了一个 .sh 脚本来处理容器启动时的额外设置配置步骤。但是,由于我在 config.yml 中的结构,仅使用“sed”命令很难更新,因此我创建了一个 python 程序来更新所有配置数据。Dockerfile、docker-compose 文件、setup.sh 和 update_config.py 文件如下所示。
设置.sh:
#!/bin/bash
# Don't remove this!
# This file is used by dockerfile to replace configs
# Replace config on run
python3 update_config.py
# Start program
go run server
Dockerfile:
# Start from the latest golang base image
FROM golang:latest
WORKDIR /go/src/server
COPY ./src/server .
# Install python3 and yml compability
RUN apt-get update && apt-get install -y python3-pip
RUN python3 --version
RUN pip3 install PyYAML
# Download packages
RUN go get .
# Compile code
#RUN go build -o server
RUN go install server
# Expose ports
EXPOSE 8500
EXPOSE 8600
# ENV
ENV DB_HOST "mysql:3306"
#CHMOD setup
RUN chmod +x setup.sh
CMD ["./setup.sh"]
码头工人组成
version : '3'
services:
react:
build: ./ReactFrontend/
container_name: ReactFrontend
tty: true
ports:
- 4000:3000
backend:
build: ./GoBackend/
container_name: GoBackend
environment:
DB_HOST: mysql:3306 # Name or IP of DB container!
ports:
- 8500:8500
- 8600:8600
networks:
default:
external:
name: database_default
更新配置.py:
import yaml
import os
"""
DONT REMOVE
This file is used in the dockerfile!
"""
fname = "/go/src/server/config.yml"
stream = open(fname, 'r')
data = yaml.safe_load(stream)
stream.close()
# Add more updates here!
if os.environ.get('DB_HOST') is not None:
data["database"]["ip"] = os.environ['DB_HOST']
# Updated data print
print("Updated Data", data)
# Write changes to config
stream = open(fname, 'w')
yaml.dump(data, stream)
stream.close()
如果我们只希望容器运行,现在可以使用的示例 docker 命令:
docker run -p 8500:8500 -p 8600:8600 --net database_default goserver
它工作正常!我们正在避免使用不必要的主机网络模式!
- 1 回答
- 0 关注
- 141 浏览
添加回答
举报