【发布时间】:2021-11-29 16:30:13
【问题描述】:
我有一个 python 脚本,它计算给定文件的单词,并在执行后将输出保存到“result.txt”文件中。我希望我的 docker 容器在容器启动时执行此操作并在控制台中显示输出。下面是我的docker文件和python文件
FROM python:3
RUN mkdir /home/data
RUN mkdir /home/output
RUN touch /home/output/result.txt
WORKDIR /home/code
COPY word_counter.py ./
CMD ["python", "word_counter.py"]
ENTRYPOINT cat ../output/result.txt
import glob
import os
from collections import OrderedDict
import socket
from pathlib import Path
dir_path = os.path.dirname(os.path.realpath(__file__))
# print(type(dir_path))
parent_path = Path(dir_path).parent
data_path = str(parent_path)+"/data"
# print(data_path)
os.chdir(data_path)
myFiles = glob.glob('*.txt')
output = open("../output/result.txt", "w")
output.write("files in home/data are : ")
output.write('\n')
for x in myFiles :
output.write(x)
output.write('\n')
output.close()
total_words = 0
for x in myFiles :
file = open(x, "r")
data = file.read()
words = data.split()
total_words = total_words + len(words)
file.close()
output = open("../output/result.txt", "a")
output.write("Total number of words in both the files : " + str(total_words))
output.write('\n')
output.close()
frequency = {}
for x in myFiles :
if x == "IF.txt" :
curr_file = x
document_text = open(curr_file, 'r')
text_string = document_text.read()
words = text_string.split()
for word in words:
count = frequency.get(word,0)
frequency[word] = count + 1
frequency_list_desc_order = sorted(frequency, key=frequency.get, reverse=True)
output = open("../output/result.txt", "a")
output.write("Top 3 words in IF.txt are :")
output.write('\n')
ip_addr = socket.gethostbyname(socket.gethostname())
for word in frequency_list_desc_order[:3]:
line = word + " : " + str(frequency[word])
output.write(line)
output.write('\n')
output.write("ip address of the machine : " + ip_addr + "\n")
output.close()
我正在将包含两个文本文件 IF.txt 和 Limerick1.txt 的本地目录从主机映射到容器内的目录“/home/data”,容器内的 python 代码读取文件并保存输出到容器内“home/output”中的result.txt。
当我使用 docker run 命令启动容器时,我希望容器将“result.txt”中的输出打印到控制台。
问题:使用 docker run 启动容器时,docker 不执行以下语句。
CMD ["python", "word_counter.py"]
运行容器的命令:
docker run -it -v /Users/xyz/Desktop/project/docker:/home/data proj2docker bash
但是当我从容器中运行相同的命令“python word_counter.py”时,它执行得非常好。
有人可以帮我解决这个问题吗?
【问题讨论】:
标签: python bash docker dockerfile