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 關注
- 170 瀏覽
添加回答
舉報