Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Linux, Python, Docker sorusu


Öne çıkan mesajlar

Mesaj tarihi:

Selamlar,

Docker üzerinde tutoriallara bakıyordum. Docker composer'in bi tutorial'ini kendi docker host'umda denemek istedim. Fakat hep hata alıyorum.

Docker host: Docker for Windows (Linux mode'ta. Windows 10 üzerinde calisiyor.)

DockerFile şu:

FROM python:3-onbuild
USER root
COPY . /usr/src/app
WORKDIR /usr/src/app
ENTRYPOINT ["python"]
CMD  ["api.py"]

Image içinde bahsedilen api.py de şu:

#!/usr/src/app python3
# Product Service

# Import framework
from flask import Flask
from flask_restful import Resource, Api

# Instantiate the app
app = Flask(__name__)
api = Api(app)

class Product(Resource):
    def get(self):
        return {
            'products': ['Ice cream', 'Chocolate', 'Fruit', 'Eggs']
        }

# Create routes
api.add_resource(Product, '/')

# Run the application
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80, debug=True)

image içine kopyaladığım dosyalar:

  • api.py
  • requirements.txt (içeriği aşağıda)
    • Flask==0.12
    • flask-restful==0.3.5

Yukarıda verdiğim DockerFile'dan ürettiğim image'in container'ı permission hatası veriyor.

PS C:\Users\TEST\Documents\Docker\tutorial-compose\product> docker run -p 80:80 test/test2
 * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
 * Restarting with stat
Traceback (most recent call last):
  File "api.py", line 23, in <module>
    app.run(host='0.0.0.0', port=80, debug=True)
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 841, in run
    run_simple(host, port, self, **options)
  File "/usr/local/lib/python3.6/site-packages/werkzeug/serving.py", line 988, in run_simple
    run_with_reloader(inner, extra_files, reloader_interval, reloader_type)
  File "/usr/local/lib/python3.6/site-packages/werkzeug/_reloader.py", line 332, in run_with_reloader
    sys.exit(reloader.restart_with_reloader())
  File "/usr/local/lib/python3.6/site-packages/werkzeug/_reloader.py", line 176, in restart_with_reloader
    exit_code = subprocess.call(args, env=new_environ, close_fds=False)
  File "/usr/local/lib/python3.6/subprocess.py", line 267, in call
    with Popen(*popenargs, **kwargs) as p:
  File "/usr/local/lib/python3.6/subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "/usr/local/lib/python3.6/subprocess.py", line 1344, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
PermissionError: [Errno 13] Permission denied: '/usr/src/app/api.py'

Yaşadığım problem linux'teki permission olayları gibi geliyor. Linux'a biraz uzağım. Çok bariz bir hata yapıyorum gibi duruyor ama nerede bulamadım.

Docker, default user olarak root kullanıyor. Ben root user'i ile permission hatası alıyorsam ne yapmalıyım bilemedim.

İçerisine kopyaladığım api.py dosyasının permissionlarına mi bir şey yapmam gerekiyor diye bakındım, bir şey bulamadım.

chmod ile tüm directory'e de yetkiler vermeyi denedim o da yemedi.

Ne yapmam gerek? olay çok DockerFile'da çözülecek gibi duruyor ama bilemedim.

 

Mesaj tarihi:

Docker’da genel olarak boyle bi sikinti var, Windows host’ta bi image olusturursan image’a giren dosyalarda permission’lar problemli olabiliyo. Mantiken Dockerfile’da bi RUN direktifi verip chmod cekerek cozebilmen lazim mesela

RUN chmod -R 777 /usr/src/app

Mesaj tarihi:

bu arada docker windos da pismanliktir.

ben forum tavsiyesi ile Linux Lite ile tanistim, birak k8s, docker i, java, python, golang, alayina akiyo valla.

Yatirim tavsiyesidir.

Mesaj tarihi:
FROM python:3
COPY . /usr/src/app
WORKDIR /usr/src/app
RUN pip install -r requirements.txt
RUN ["chmod", "-R", "777", "/usr/src/app"]
RUN ["chmod", "-R", "777", "/usr/local/lib/python3.7"]
ENTRYPOINT ["python"]
CMD  ["api.py"]

İzinleri de veriyorum. Olmuyor :S

Docker çok güzel şey de, böyle sorun yaşayınca problemin çözümünü bulmak baya zor oluyor ya benim için ?

Bu shebang midir nedir, sorun onla alakalı gibi.

Mesaj tarihi: (düzenlendi)

Bi de Dockerfile'a EXPOSE 8080 falan diyip port'u expose ettikten sonra host makinede run ederken su sekilde baska bi port'a bind'lamayi denesene

docker run -p 45678:8080 test/test2

Sonra yine host makinede localhost:45678 diye gidince acilmasi lazim aletin

 

Yine olmazsa eve gecince Windows makinemde deneyip yazarim sfdgkjdsg

 

Edit: Bu arada Python'u tam bilmedigim icin soruyorum, Flask standart bi kutuphane falan mi? Degilse pip gibi package manager'la falan dependency'leri kurdurmak gerekmiyo mu?

Kojiroh tarafından düzenlendi
Mesaj tarihi: (düzenlendi)
On 26.03.2019 at 21:41, ShadowFax dedi ki:

FROM python:3
COPY . /usr/src/app
WORKDIR /usr/src/app
RUN pip install -r requirements.txt
RUN ["chmod", "-R", "777", "/usr/src/app"]
RUN ["chmod", "-R", "777", "/usr/local/lib/python3.7"]
ENTRYPOINT ["python"]
CMD  ["api.py"]

İzinleri de veriyorum. Olmuyor :S

Docker çok güzel şey de, böyle sorun yaşayınca problemin çözümünü bulmak baya zor oluyor ya benim için ?

Bu shebang midir nedir, sorun onla alakalı gibi.

Run da string array vermek zorunda değilsin, terminal da yazar gibi yazabilirsin direkt. Telefondan yazıyorum o yüzden çok detay giremiyorum ama port Expose etmen lazım. Ayrıca Python versiyonunu echo ettir bi, 2.7 de çalıştırmaya çalışıyor olabilir 

Pasha tarafından düzenlendi
Mesaj tarihi: (düzenlendi)

Hatta docker images la image listini al, docker run -it imageid bash le containerın terminaline girebilirsin. Birde ordan çalıştır 

 

çözemezsen öm at, yarın beraber bakarız 

Pasha tarafından düzenlendi
Mesaj tarihi:

Selam, teşekkürler Kojiroh. 

Bir arkadaşımın yardımıyla şöyle çözdüm ben de:

 

api.py’nin son satırını şöyle değiştirdik:

 

app.run(host='0.0.0.0', port=8080, debug=True, use_reloader=False)

 

seninkine de yarin bakiyim, çok teşekkürler ?

Mesaj tarihi:
23 saat önce, Pasha dedi ki:

Hatta docker images la image listini al, docker run -it imageid bash le containerın terminaline girebilirsin. Birde ordan çalıştır 

 

çözemezsen öm at, yarın beraber bakarız 

Selam, 

 

çözdük. Teşekkürler teklif için ?

×
×
  • Yeni Oluştur...