簡體   English   中英

在Docker容器中運行腳本

[英]Running script in docker container

我嘗試設置兩個泊塢窗。 一個帶有服務,另一個帶有數據庫。 在具有服務的Docker上,我嘗試從https://github.com/vishnubob/wait-for-it運行腳本wait-for-it.sh。

我嘗試使用docker-compose文件來完成所有這些工作,但我將問題隔離到在容器開頭運行.sh文件。

FROM openjdk:8-jdk-alpine
RUN apk add --no-cache bash
COPY ./target/docker-demo-0.0.1-SNAPSHOT.jar  /app.jar
COPY ./src/main/resources/wait-for-it.sh  /wait-for-it.sh
ENTRYPOINT ["/wait-for-it.sh", "192.168.99.100:5432", "--", "java", "-jar", 
"/app.jar"]
EXPOSE 8080

我正在使用高山圖像中的干凈灰燼,接下來,我正在安裝bash。 當然,我正在將腳本的第一行代碼從

#!/usr/bin/env bash

進入

#!/bin/sh

要么

#!/bin/bash

沒什么 我看到了如何在Alpine Docker容器中運行bash腳本的主題但這也沒有幫助。

我總是收到“沒有這樣的文件或目錄”。 我當時很亂

ENTRYPOINT ["/wait-for-it.sh"...

通過增加 ”。” 要么 ”。/”

我正在Windows 8上使用docker工具在Windows上構建的整個項目。也許是有原因的?

我遇到過同樣的問題。 我花了兩天的時間弄清楚為什么它不起作用。 我的主機是Windows,因此為dos格式化了wait-it.sh文件。

  1. 我必須運行dos2unix wait-for-it.sh命令才能將文件轉換為Unix系統。 將文件轉換為UNIX系統
  2. 我在Dockerfile中添加了以下3行:

RUN apk add --no-cache bash
COPY wait-for-it.sh /wait-for-it.sh
RUN chmod +x /wait-for-it.sh

之后,在容器啟動時,運行了wait-it.sh。

如果您使用的是GIT,則git會根據主機來處理行尾。 您必須在項目內部添加.gitattributes文件,並將*.sh eol=lf這行添加到此文件中。 因此,您告訴所有.sh文件的行尾都以LF結尾

COPY ./src/main/resources/wait-for-it.sh  /wait-for-it.sh

這是罪魁禍首。 如果腳本在絕對目錄中,請使用此選項

COPY /src/main/resources/wait-for-it.sh  /wait-for-it.sh

或如果腳本位於相對目錄中,則使用此選項

COPY src/main/resources/wait-for-it.sh  /wait-for-it.sh

然后運行

RUN chmod 700 /wait-for-it.sh
  1. 在復制語句中,嘗試僅提供目標文件夾。

    例如COPY ./src/main/resources/wait-for-it.sh / app

  2. 還要設置容器開始的工作目錄

    WORKDIR / app

還要確保您已對文件給出執行權限,如他的答案中建議的@vamsi。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM