2016-11-20 13 views
0

Ich kann kein Lua-Skript von/in einem Docker-Image ausführen.Ausführen von Lua-Skript in Docker

Ich habe einen sehr einfachen Lua-Skript, das ich in dem Bild enthalten müssen:

function main(...) 
    print("hello world") 
end 

ich eine Dockerfile erstellt habe:

FROM debian:latest 
RUN apt-get -y update && apt-get -y install lua5.1 lua-socket lua-sec 
ADD hello.lua /home/user/bin/hello.lua 
CMD ["/bin/sh", "-c", “lua /home/user/bin/hello.lua”] 

Aber wenn ich versuche, das Docker Bild, das ich laufe Fehlermeldung:

/bin/sh: 1: [/bin/sh,: not found 

Gibt es eine gute Erklärung, warum ich diesen Fehler bekomme und wie ich die sc machen kann ript run, wenn ich das Docker-Image starte.

Antwort

0

Letzte Zeile Ihres Dockerfile sein sollte

CMD ["lua", "/home/user/bin/hello.lua"] 

Denken Sie daran, Sie hello.lua nichts gedruckt wird. Es definiert die Funktion main, aber diese Funktion wird in diesem Beispiel nie aufgerufen.

Es ist kein Python, mit Lua beim Aufruf einer Lua-Datei wird der Haupt-Chunk aufgerufen. Wenn Sie Parameter von der Kommandozeile zu übergeben:

CMD ["lua", "/home/user/bin/hello.lua", "param1"] 

hello.lua:

-- get all passed parameters into table 
local params = {...} 

-- print first parameters if any 
print(params[1]) 
0

Sie können direkt mit dem lua Befehl als CMD in Ihrem Dockerfile verwenden:

CMD ["lua", "/home/user/bin/hello.lua"] 
1

Ihr letzter Befehl smartquotes in es um den lua Befehl hat. Diese sind ungültig json Zeichen:

CMD ["/bin/sh", "-c", “lua /home/user/bin/hello.lua”] 

Als Ergebnis Docker versucht, die Zeichenfolge auszuführen und werfen den Fehler über eine fehlende [/bin/sh,. Schalten Sie Ihre Angebote auf normale Anführungszeichen (und vermeiden was Editor Sie verwendet, die denen hinzugefügt):

CMD ["/bin/sh", "-c", "lua /home/user/bin/hello.lua"] 

Wie andere erwähnt haben, können Sie die Schale ganz überspringen:

CMD ["lua", "/home/user/bin/hello.lua"] 

Und Ihre hello.lua Haupt Funktion wird nicht aufgerufen werden, so dass Sie diese auf nur noch den Befehl vereinfachen können Sie ausführen möchten: 012.351

:

print("hello world") 

Am Ende man so etwas sehen sollte

$ cat hello.lua 
print("hello world") 

$ cat Dockerfile 
FROM debian:latest 
RUN apt-get -y update && apt-get -y install lua5.1 lua-socket lua-sec 
ADD hello.lua /home/user/bin/hello.lua 
CMD ["lua", "/home/user/bin/hello.lua"] 

$ docker build -t luatest . 
Sending build context to Docker daemon 3.072 kB 
Step 1 : FROM debian:latest 
---> 7b0a06c805e8 
Step 2 : RUN apt-get -y update && apt-get -y install lua5.1 lua-socket lua-sec 
---> Using cache 
---> 0634e4608b04 
Step 3 : ADD hello.lua /home/user/bin/hello.lua 
---> Using cache 
---> 35fd4ca7f0f0 
Step 4 : CMD /bin/sh -c lua /home/user/bin/hello.lua 
---> Using cache 
---> 440098465ee4 
Successfully built 440098465ee4 

$ docker run -it luatest 
hello world 
Verwandte Themen