Я не понимаю, почему, когда я пытаюсь использовать мое приложение python coinbase в докер-контейнере, я всегда получаю coinbase.wallet.error.AuthenticationError: APIError(id=authentication_error): invalid api key
Я проверил, что мой ключ API правильный и присутствует событиеесли я его распечатаю (в журнале докера)
Если запустить одно и то же приложение напрямую с оружейным оружием, оно будет работать как шарм.
Есть идеи, что здесь происходит?
Вот Dockerfile для приложения фляги
FROM python:3.5
ENV PYTHONUNBUFFERED 1
RUN mkdir -p /opt/services/flaskapp/src
# We copy the requirements.txt file first to avoid cache invalidations
COPY requirements.txt /opt/services/flaskapp/src/
COPY . /opt/services/flaskapp/src
WORKDIR /opt/services/flaskapp/src
RUN ls
RUN pip install -e .
RUN pip install -r requirements.txt
RUN pip install uwsgi
RUN myapp init
RUN tox
EXPOSE 5090
CMD ["gunicorn", "-b 0.0.0.0:5090", "myapp.wsgi:app"]
Вот Docker compose
version: '3.2'
services:
db:
image: "postgres:9.6.5"
volumes:
- "dbdata:/var/lib/postgresql/data"
env_file:
- ./myapp/.env
networks:
- traefik-net
flaskapp:
build: .
env_file:
- ./myapp/.env
privileged: true
volumes:
- .:/opt/services/flaskapp/src
networks:
- traefik-net
depends_on:
- db
nginx:
image: "nginx:1.13.5"
ports:
- "4280:80"
volumes:
- ./conf.d:/etc/nginx/conf.d
networks:
- traefik-net
depends_on:
- flaskapp
networks:
traefik-net:
driver: bridge
volumes:
dbdata
Вот код приложения, который вызывает build_api_error
cb_helper = CoinbaseHelper(
account,
os.getenv("CB_API_KEY"),
os.getenv("CB_API_SECRET")
)
print(os.getenv("CB_API_KEY"))
cb_wallet = cb_helper.create_address()
Результат
flaskapp_1 | Traceback (most recent call last):
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/flask/app.py", line 1997, in __call__
flaskapp_1 | return self.wsgi_app(environ, start_response)
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/flask/app.py", line 1985, in wsgi_app
flaskapp_1 | response = self.handle_exception(e)
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/flask_restful/__init__.py", line 273, in error_router
flaskapp_1 | return original_handler(e)
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/flask/app.py", line 1540, in handle_exception
flaskapp_1 | reraise(exc_type, exc_value, tb)
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/flask/_compat.py", line 32, in reraise
flaskapp_1 | raise value.with_traceback(tb)
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/flask/app.py", line 1982, in wsgi_app
flaskapp_1 | response = self.full_dispatch_request()
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/flask/app.py", line 1614, in full_dispatch_request
flaskapp_1 | rv = self.handle_user_exception(e)
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/flask_restful/__init__.py", line 273, in error_router
flaskapp_1 | return original_handler(e)
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/flask/app.py", line 1517, in handle_user_exception
flaskapp_1 | reraise(exc_type, exc_value, tb)
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/flask/_compat.py", line 32, in reraise
flaskapp_1 | raise value.with_traceback(tb)
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/flask/app.py", line 1612, in full_dispatch_request
flaskapp_1 | rv = self.dispatch_request()
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/flask/app.py", line 1598, in dispatch_request
flaskapp_1 | return self.view_functions[rule.endpoint](**req.view_args)
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/flask_restful/__init__.py", line 480, in wrapper
flaskapp_1 | resp = resource(*args, **kwargs)
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/flask/views.py", line 84, in view
flaskapp_1 | return self.dispatch_request(*args, **kwargs)
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/flask_restful/__init__.py", line 595, in dispatch_request
flaskapp_1 | resp = meth(*args, **kwargs)
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/flask_jwt_extended/view_decorators.py", line 39, in wrapper
flaskapp_1 | return fn(*args, **kwargs)
flaskapp_1 | File "./myapp/api/resources/wallet.py", line 74, in post
flaskapp_1 | cb_wallet = cb_helper.create_address()
flaskapp_1 | File "./myapp/commons/coinbase.py", line 13, in create_address
flaskapp_1 | adresse = self.client.create_address(self.account)
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/coinbase/wallet/client.py", line 308, in create_address
flaskapp_1 | response = self._post('v2', 'accounts', account_id, 'addresses', data=params)
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/coinbase/wallet/client.py", line 132, in _post
flaskapp_1 | return self._request('post', *args, **kwargs)
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/coinbase/wallet/client.py", line 116, in _request
flaskapp_1 | return self._handle_response(response)
flaskapp_1 | File "/usr/local/lib/python3.5/site-packages/coinbase/wallet/client.py", line 125, in _handle_response
flaskapp_1 | raise build_api_error(response)
flaskapp_1 | coinbase.wallet.error.AuthenticationError: APIError(id=authentication_error): invalid api key
Вот мой класс помощников по монетной базе
from coinbase.wallet.client import Client
class CoinbaseHelper():
"""
Helper to talk to coinbase API
"""
def __init__(self, account, api_key, api_secret):
self.client = Client(api_key, api_secret)
self.account = account
def create_address(self):
adresse = self.client.create_address(self.account)
return adresse
def get_adresse(self, addr):
address = self.client.get_address(self.account, addr)
return address
def get_accounts(self):
accounts = self.client.get_accounts()
return accounts