我是 docker 新手,我想為我的 django 應用程式設定一個 docker-compose。在我的應用程式的后端,我也有 golang 包,并使用子行程庫在 djang 中運行它。
但是,當我想使用安裝包go install github.com/x/y@latest然后將其二進制檔案復制到專案目錄時,它給了我錯誤:package github.com/x/y@latest: cannot use path@version syntax in GOPATH mode
我在互聯網上搜索了很多,但沒有找到解決我的問題的解決方案。你能告訴我我哪里錯了嗎?
這是我的Dockerfile:
FROM golang:1.18.1-bullseye as go-build
# Install go package
RUN go install github.com/hakluke/hakrawler@latest \
&& cp $GOPATH/bin/hakrawler /usr/local/bin/
# Install main image for backend
FROM python:3.8.11-bullseye
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Install Dist packages
RUN apt-get update \
&& apt-get -y install --no-install-recommends software-properties-common libpq5 python3-dev musl-dev git netcat-traditional golang \
&& rm -rf /var/lib/apt/lists/
# Set work directory
WORKDIR /usr/src/redteam_toolkit/
# Install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt .
RUN pip install -r requirements.txt
# Copy project, and then the go package
COPY . .
COPY --from=go-build /usr/local/bin/hakrawler /usr/src/redteam_toolkit/toolkit/scripts/webapp/
docker-compose.yml:
version: '3.3'
services:
webapp:
build: .
command: python manage.py runserver 0.0.0.0:4334
container_name: toolkit_webapp
volumes:
- .:/usr/src/redteam_toolkit/
ports:
- 4334:4334
env_file:
- ./.env
depends_on:
- db
db:
image: postgres:13.4-bullseye
container_name: database
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- POSTGRES_DB=redteam_toolkit_db
volumes:
postgres_data:
目錄中的get.py檔案/usr/src/redteam_toolkit/toolkit/scripts/webapp/,僅運行 go 包,并列出此目錄中的檔案:
import os
import subprocess
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(f"Current path is: {BASE_DIR}")
def go(target_url):
run_go_package = subprocess.getoutput(
f"echo {target_url} | {BASE_DIR}/webapp/hakrawler -t 15 -u"
)
list_files = subprocess.getoutput(f"ls {BASE_DIR}/webapp/")
print(run_go_package)
print(list_files)
go("https://example.org")
然后我就跑:
$ docker-compose up -d --build
$ docker-compose exec webapp python toolkit/scripts/webapp/get.py
輸出是:
Current path is: /usr/src/redteam_toolkit/toolkit/scripts
/bin/sh: 1: /usr/src/redteam_toolkit/toolkit/scripts/webap/hakrawler: not found
__init__.py
__pycache__
scr.py
gather.py
uj5u.com熱心網友回復:
這看起來非常適合多階段構建:
FROM golang:1.18.0 as go-build
# Install packages
RUN go install github.com/x/y@latest \
&& cp $GOPATH/bin/pacakge /usr/local/bin/
FROM python:3.8.11-bullseye as release
...
COPY --from=go-build /usr/local/bin/package /usr/src/toolkit/toolkit/scripts/webapp/
...
您的撰寫檔案也需要更新,它/usr/src/redteam_toolkit使用卷掛載掩蓋了整個檔案夾。洗掉該卷掛載以查看映像的內容。
uj5u.com熱心網友回復:
GOPATH模式不適用于 Golang 模塊,在 Dockerfile 檔案中添加:
RUN unset GOPATH
uj5u.com熱心網友回復:
采用RUN go get <package_repository>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/466889.html
