[英]docker-compose: Why is my python application being invoked here?
我已經為此撓了一下頭。 我的python應用程序具有以下Dockerfile:
# Use an official Python runtime as a parent image
FROM frankwolf/rpi-python3
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
COPY . /app
RUN chmod 777 docker-entrypoint.sh
# Install any needed packages specified in requirements.txt
RUN pip3 install --trusted-host pypi.python.org -r requirements.txt
# Run __main__.py when the container launches
CMD ["sudo", "python3", "__main__.py", "-debug"] # Not sure if I need sudo here
docker-compose文件:
version: "3"
services:
mongoDB:
restart: unless-stopped
volumes:
- "/data/db:/data/db"
ports:
- "27017:27017"
- "28017:28017"
image: "andresvidal/rpi3-mongodb3:latest"
mosquitto:
restart: unless-stopped
ports:
- "1883:1883"
image: "mjenz/rpi-mosquitto"
FG:
privileged: true
network_mode: "host"
depends_on:
- "mosquitto"
- "mongoDB"
volumes:
- "/home/pi:/home/pi"
#image: "arkfreestyle/fg:v1.8"
image: "test:latest"
entrypoint: /app/docker-entrypoint.sh
restart: unless-stopped
docker-entrypoint.sh如下所示:
#!/bin/sh
if [ ! -f /home/pi/.initialized ]; then
echo "Initializing..."
echo "Creating .initialized"
# Create .initialized hidden file
touch /home/pi/.initialized
else
echo "Initialized already!"
sudo python3 __main__.py -debug
fi
這是我想做的事情:
(這個東西已經可以用了)
1)我需要一個在容器中運行python應用程序時運行的docker映像。 (這有效)
2)我需要一個運行2個服務+我的python應用程序的docker-compose文件,但是在運行python應用程序之前,我需要做一些初始化工作,為此,我創建了一個shell腳本docker-entrypoint.sh。 我只想在第一次將應用程序部署到計算機上時進行一次初始化工作。 所以我正在創建一個.initialized隱藏文件,用作我的shell腳本中的檢查。
我讀到在docker-compose文件中使用入口點會覆蓋提供給Dockerfile的所有舊入口點/ cmd。 因此,這就是為什么在我的shell腳本的else部分中,我使用“ sudo python3 main .py -debug”手動運行代碼時,else部分可以正常工作的原因。
(這是主要問題)
在if部分中,我沒有在shell腳本中運行我的應用程序。 我已經分別測試了shell腳本本身,if和else語句均按預期工作,但是當我運行“ sudo docker-compose up”時,我的shell腳本第一次遇到if部分時,它會回顯這兩個語句,隱藏文件然后運行我的應用程序 。 對於應用程序,控制台輸出以紫色/粉紅色/淡紫色顯示,而其他兩個服務以黃色和青色顯示其日志。 我不確定顏色是否重要,但是在正常情況下,我的應用程序日志始終為綠色,實際上前兩個回聲“ Initializing”和“ Creating .initialized”也為綠色! 所以我想提到這個細節。 在這兩個回聲之后,我的應用程序開始神秘地啟動,並以紫色記錄控制台輸出...
為什么/如何在shell腳本的if語句中調用我的應用程序?
(這只會在我通過docker-compose運行時發生,而不是僅在我使用sh docker-entrypoint.sh運行shell腳本時發生)
同時使用ENTRYPOINT
和CMD
會有一些奇怪的效果 。
這發生在您的容器上:
.initialized
文件不存在。 if
執行case。 文件已創建。 restart: unless-stopped
選項重新啟動容器。 .initialized
文件現在存在, else
運行案例。 python3 __main__.py -debug
被執行。 順便說一句,Dockerfile中的USER
命令或Docker Compose中的user
選項比sudo
更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.