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


ShadowFax

Öne çıkan mesajlar

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.

 

Link to comment
Sosyal ağlarda paylaş

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.

Link to comment
Sosyal ağlarda paylaş

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
Link to comment
Sosyal ağlarda paylaş

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
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...