Answer a question

I'm trying to run one of my Docker work projects from MacBook Air M1 and I'm getting the following error while executing docker-compose up. Apparently it can't find the python installation, even though I can do both python --version and python3 --version from terminal. I'm relatively new to Docker but I tried to troubleshoot every possible thing to solve this error

#8 91.79 info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
#8 91.79 error /app/node_modules/node-sass: Command failed.
#8 91.79 Exit code: 1
#8 91.79 Command: node scripts/build.js
#8 91.79 Arguments: 
#8 91.79 Directory: /app/node_modules/node-sass
#8 91.79 Output:
#8 91.79 Building: /usr/local/bin/node /app/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
#8 91.79 gyp info it worked if it ends with ok
#8 91.79 gyp verb cli [
#8 91.79 gyp verb cli   '/usr/local/bin/node',
#8 91.79 gyp verb cli   '/app/node_modules/node-gyp/bin/node-gyp.js',
#8 91.79 gyp verb cli   'rebuild',
#8 91.79 gyp verb cli   '--verbose',
#8 91.79 gyp verb cli   '--libsass_ext=',
#8 91.79 gyp verb cli   '--libsass_cflags=',
#8 91.79 gyp verb cli   '--libsass_ldflags=',
#8 91.79 gyp verb cli   '--libsass_library='
#8 91.79 gyp verb cli ]
#8 91.79 gyp info using node-gyp@7.1.2
#8 91.79 gyp info using node@16.13.0 | linux | arm64
#8 91.79 gyp verb command rebuild []
#8 91.79 gyp verb command clean []
#8 91.79 gyp verb clean removing "build" directory
#8 91.79 gyp verb command configure []
#8 91.79 gyp verb find Python Python is not set from command line or npm configuration
#8 91.79 gyp verb find Python Python is not set from environment variable PYTHON
#8 91.79 gyp verb find Python checking if "python3" can be used
#8 91.79 gyp verb find Python - executing "python3" to get executable path
#8 91.79 gyp verb find Python - "python3" is not in PATH or produced an error
#8 91.79 gyp verb find Python checking if "python" can be used
#8 91.79 gyp verb find Python - executing "python" to get executable path
#8 91.79 gyp verb find Python - "python" is not in PATH or produced an error
#8 91.79 gyp verb find Python checking if "python2" can be used
#8 91.79 gyp verb find Python - executing "python2" to get executable path
#8 91.79 gyp verb find Python - "python2" is not in PATH or produced an error
#8 91.79 gyp ERR! find Python 
#8 91.79 gyp ERR! find Python Python is not set from command line or npm configuration
#8 91.79 gyp ERR! find Python Python is not set from environment variable PYTHON
#8 91.79 gyp ERR! find Python checking if "python3" can be used
#8 91.79 gyp ERR! find Python - "python3" is not in PATH or produced an error
#8 91.79 gyp ERR! find Python checking if "python" can be used
#8 91.79 gyp ERR! find Python - "python" is not in PATH or produced an error
#8 91.79 gyp ERR! find Python checking if "python2" can be used
#8 91.79 gyp ERR! find Python - "python2" is not in PATH or produced an error
#8 91.79 gyp ERR! find Python 
#8 91.79 gyp ERR! find Python **********************************************************
#8 91.79 gyp ERR! find Python You need to install the latest version of Python.
#8 91.79 gyp ERR! find Python Node-gyp should be able to find and use Python. If not,
#8 91.79 gyp ERR! find Python you can try one of the following options:
#8 91.79 gyp ERR! find Python - Use the switch --python="/path/to/pythonexecutable"
#8 91.79 gyp ERR! find Python   (accepted by both node-gyp and npm)
#8 91.79 gyp ERR! find Python - Set the environment variable PYTHON
#8 91.79 gyp ERR! find Python - Set the npm configuration variable python:
#8 91.79 gyp ERR! find Python   npm config set python "/path/to/pythonexecutable"
#8 91.79 gyp ERR! find Python For more information consult the documentation at:
#8 91.79 gyp ERR! find Python https://github.com/nodejs/node-gyp#installation
#8 91.79 gyp ERR! find Python **********************************************************
#8 91.79 gyp ERR! find Python 
#8 91.79 gyp ERR! configure error 
#8 91.79 gyp ERR! stack Error: Could not find any Python installation to use
#8 91.79 gyp ERR! stack     at PythonFinder.fail (/app/node_modules/node-gyp/lib/find-python.js:302:47)
#8 91.79 gyp ERR! stack     at PythonFinder.runChecks (/app/node_modules/node-gyp/lib/find-python.js:136:21)
#8 91.79 gyp ERR! stack     at PythonFinder.<anonymous> (/app/node_modules/node-gyp/lib/find-python.js:179:16)
#8 91.79 gyp ERR! stack     at PythonFinder.execFileCallback (/app/node_modules/node-gyp/lib/find-python.js:266:16)
#8 91.79 gyp ERR! stack     at exithandler (node:child_process:404:5)
#8 91.79 gyp ERR! stack     at ChildProcess.errorhandler (node:child_process:416:5)
#8 91.79 gyp ERR! stack     at ChildProcess.emit (node:events:390:28)
#8 91.79 gyp ERR! stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:288:12)
#8 91.79 gyp ERR! stack     at onErrorNT (node:internal/child_process:477:16)
#8 91.79 gyp ERR! stack     at processTicksAndRejections (node:internal/process/task_queues:83:21)
#8 91.79 gyp ERR! System Linux 5.10.47-linuxkit
#8 91.79 gyp ERR! command "/usr/local/bin/node" "/app/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
#8 91.79 gyp ERR! cwd /app/node_modules/node-sass
#8 91.79 gyp ERR! node -v v16.13.0
#8 91.79 gyp ERR! node-gyp -v v7.1.2
#8 91.79 gyp ERR! not ok 
#8 91.79 Build failed with error code: 1

I tried all of the things that the error suggests - setting the path variable of the python, and trying to set NPM's config to the python's path but no luck...

I also tried downgrading node to v16, as node-sass 6.0.1 is not compatible with node v17 according to the docs

I have python 3.9.8 installed via homebrew, and running which python3 outputs /opt/homebrew/bin/python3

node -v: v16.13.0

npm -v: v8.1.0

echo $PATH: /Library/Frameworks/Python.framework/Versions/3.10/bin /opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin

npm config list:


prefix = "/opt/homebrew" 

; "global" config from /opt/homebrew/etc/npmrc

; python = "/opt/homebrew/opt/python@3.9/libexec/bin" ; overridden by user

; "user" config from /Users/**username**/.npmrc

python = "/opt/homebrew/opt/python@3.9/libexec/bin" 

Answers

Problem:

The python is installed locally on your macbook but not inside the docker container (which is an isolated virtual os).

Solution

You need to install python in the same container where you are running the nodejs script or npm command.

Try Adding this after pulling your nodejs image in dockerFile

RUN apt-get update || : && apt-get install python -y

That is for debian or debian based linux distro ... (if you have official Node image that is based on debian so the upper line should work fine right after you pull the image run you need to install python in the same container).

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐