當我嘗試一起管理 docker-compose 和 dockerfile 時,我遇到了一些問題。我研究過并且我知道可以在沒有 dockerfile 的情況下使用 docker-compose,但我認為對我來說最好也使用 Dockerfile,因為我想要一個易于修改的環境。問題是我想要一個帶有 postgres 的容器,它是另一個容器的依賴組件,名為 api 的容器用于運行應用程式。此容器包含 Java 17 和 Maven 3,并使用來自 Dockerfile 的 docker-compose 影像。問題是:當我使用 Dockerfile 時,一切都很好,但實際上當我使用 docker-compose 時,我收到了這個錯誤:
2021-12-08T08:36:37.221247254Z /usr/local/bin/mvn-entrypoint.sh: line 50: exec: mvn test: not found
組態檔是:
- 檔案
FROM openjdk:17-jdk-slim
ARG MAVEN_VERSION=3.8.4
ARG USER_HOME_DIR="/root"
ARG SHA=a9b2d825eacf2e771ed5d6b0e01398589ac1bfa4171f36154d1b5787879605507802f699da6f7cfc80732a5282fd31b28e4cd6052338cbef0fa1358b48a5e3c8
ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries
RUN apt-get update && \
apt-get install -y \
curl procps \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
&& curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
&& echo "${SHA} /tmp/apache-maven.tar.gz" | sha512sum -c - \
&& tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
&& rm -f /tmp/apache-maven.tar.gz \
&& ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
ENV MAVEN_HOME /usr/share/maven
ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2"
COPY mvn-entrypoint.sh /usr/local/bin/mvn-entrypoint.sh
COPY settings-docker.xml /usr/share/maven/ref/
COPY . .
RUN ["chmod", " x", "/usr/local/bin/mvn-entrypoint.sh"]
ENTRYPOINT ["/usr/local/bin/mvn-entrypoint.sh"]
CMD ["mvn", "test"]
和 docker-compose 檔案:
services:
api_service:
build:
context: .
dockerfile: Dockerfile
restart: always
container_name: api_core_backend
ports:
- 8080:8080
depends_on:
- postgres_db
postgres_db:
image: "postgres:latest"
container_name: postgres_core_backend
restart: always
ports:
- 5432:5432
environment:
POSTGRES_DB: postgres
POSTGRES_PASSWORD: root
誰能解釋一下為什么我在使用 docker-compose 執行時出錯,但如果我使用 dockerfile 則一切正常?謝謝你。
更新:當我嘗試連接到另一個容器時出現鏈接錯誤:
Caused by: org.flywaydb.core.internal.exception.FlywaySqlException:
Unable to obtain connection from database: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL State : 08001
Error Code : 0
Message : Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
uj5u.com熱心網友回復:
問題
根據日志,問題似乎是您在localhost連接時用作主機名。
Docker compose 創建了一個內部網路,其中主機名映射到服務名稱。所以在你的情況下,主機名是postgres_db.
有關更多資訊,請參閱docker compose 檔案。
解決方案
嘗試指定postgres_db為主機名:)
uj5u.com熱心網友回復:
我帶著更新來了。實際上,問題在于命令沒有在同一個容器上執行,所以我不得不使用這樣的 docker-compose 檔案:
version: "3.7"
services:
api_service:
build:
context: .
dockerfile: Dockerfile
restart: always
container_name: api_core_backend
command: mvn test
ports:
- "8080:8080"
links:
- postgres_db
depends_on:
- postgres_db
postgres_db:
image: "postgres:latest"
container_name: postgres_core_backend
restart: always
expose:
- "5432:5432"
ports:
- "5432:5432"
environment:
POSTGRES_DB: postgres
POSTGRES_PASSWORD: root
現在的問題是我必須連接這些容器以在它們之間進行通信,我看到我可以使用“鏈接”來做到這一點,但實際上不起作用,因為我在運行應用程式時遇到了錯誤。我做錯了什么?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/376528.html
標籤:猛击 码头工人 贝壳 docker-compose 文件
下一篇:TCL處理引數模板
