i am trying to read a file in a docker container, precisly the etc/passwd, to make a list of old and new user, but i am stuck at making my function get the file in the docker container from my api
myoswrap is:
code.
Код: Выделить всё
def readFileByLine( filename):
try:
command = f"cat {filename}"
output = subprocess.check_output(["/usr/bin/docker", "exec", "userapi_cnt_ad", "sh", "-c", command])
output_lines = output.decode("utf-8").splitlines()
return output_lines
except subprocess.CalledProcessError:
return None
Код: Выделить всё
@app.route('/users')
def route_getUsers():
users = dom.getUserList()
newUsers = []
initialUsers = []
for user in users:
if dom.isInitialUser(user) == False:
newUsers.append(user)
else:
initialUsers.append(user)
return jsonify({"newUsers": newUsers, "initialUsers": initialUsers}), 200
Код: Выделить всё
import json
import docker
INITIAL_USERS = ['root:x:0:0:root:/root:/bin/bash', 'daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin', 'bin:x:2:2:bin:/bin:/usr/sbin/nologin', 'sys:x:3:3:sys:/dev:/usr/sbin/nologin', 'sync:x:4:65534:sync:/bin:/bin/sync', 'games:x:5:60:games:/usr/games:/usr/sbin/nologin', 'man:x:6:12:man:/var/cache/man:/usr/sbin/nologin', 'lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin', 'mail:x:8:8:mail:/var/mail:/usr/sbin/nologin',
'news:x:9:9:news:/var/spool/news:/usr/sbin/nologin', 'uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin', 'proxy:x:13:13:proxy:/bin:/usr/sbin/nologin', 'www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin', 'backup:x:34:34:backup:/var/backups:/usr/sbin/nologin', 'list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin', 'irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin', 'gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin', 'nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin', '_apt:x:100:65534::/nonexistent:/usr/sbin/nologin']
Код: Выделить всё
def getUserList():
users = []
lines = myoswrap.readFileByLine('/etc/passwd')
if lines is not None: # Check if lines is not None
for line in lines:
users.append(line.split(':')[0])
return users
def isInitialUser(username):
if username in repo.INITIAL_USERS:
return True
return False
Код: Выделить всё
#!/bin/bash
docker container stop userapi_cnt_ad
docker container rm userapi_cnt_ad
docker image rm userapi_img_ad
docker volume rm ad_vol
docker volume create --name ad_vol --opt device=/mnt/share/ad-infra-tp-2-h-2024 --opt o=bind --opt type=none
docker build -t userapi_img_ad -f ./project/docker/Dockerfile .
docker run -d -p 15556:25556 --mount source=ad_vol,target=/mnt/app --name userapi_cnt_ad userapi_img_ad
Код: Выделить всё
FROM demers/python420w4a
COPY ./requirements.txt /
RUN pip3 install -r /requirements.txt
WORKDIR /mnt/app/
CMD ["./run.sh", "./project/main/userapi.py", "25556"]
i also tried the
Код: Выделить всё
output = subprocess.check_output(["/usr/bin/docker", "exec", "userapi_cnt_ad", "sh", "-c", command])
Код: Выделить всё
/usr/bin/dockerИсточник: https://stackoverflow.com/questions/781 ... -container
Мобильная версия