docker push to gcr.io fails with “denied: Token exchange failed for project”
I've discovered a flow that works through GCP console but not through the gcloud
CLI.
Minimal Repro
The following bash snippet creates a fresh GCP project and attempts to push an image to gcr.io, but fails with "access denied" even though the user is project owner:
gcloud auth login
PROJECT_ID="example-project-20181120"
gcloud projects create "$PROJECT_ID" --set-as-default
gcloud services enable containerregistry.googleapis.com
gcloud auth configure-docker --quiet
mkdir ~/docker-source && cd ~/docker-source
git clone https://github.com/mtlynch/docker-flask-upload-demo.git .
LOCAL_IMAGE_NAME="flask-demo-app"
GCR_IMAGE_PATH="gcr.io/${PROJECT_ID}/flask-demo-app"
docker build --tag "$LOCAL_IMAGE_NAME" .
docker tag "$LOCAL_IMAGE_NAME" "$GCR_IMAGE_PATH"
docker push "$GCR_IMAGE_PATH"
Result
The push refers to repository [gcr.io/example-project-20181120/flask-demo-app]
02205dbcdc63: Preparing
06ade19a43a0: Preparing
38d9ac54a7b9: Preparing
f83363c693c0: Preparing
b0d071df1063: Preparing
90d1009ce6fe: Waiting
denied: Token exchange failed for project 'example-project-20181120'. Access denied.
The system is Ubuntu 16.04 with the latest version of gcloud 225.0.0, as of this writing. The account I auth'ed with has role roles/owner
.
Inconsistency with GCP Console
I notice that if I follow the same flow through GCP Console, I can docker push
successfully:
- Create a new GCP project via GCP Console
- Create a service account with
roles/owner
via GCP Console - Download JSON key for service account
- Enable container registry API via GCP Console
gcloud auth activate-service-account --key-file key.json
gcloud config set project $PROJECT_ID
gcloud auth configure-docker --quiet
docker tag "$LOCAL_IMAGE_NAME" "$GCR_IMAGE_PATH" && docker push "$GCR_IMAGE_PATH"
Result: Works as expected. Successfully pushes docker image to gcr.io.
Other attempts
I also tried using gcloud auth login
as my @gmail.com account, then using that account to create a service account with gcloud, but that gets the same denied
error:
SERVICE_ACCOUNT_NAME=test-service-account
gcloud iam service-accounts create "$SERVICE_ACCOUNT_NAME"
KEY_FILE="${HOME}/key.json"
gcloud iam service-accounts keys create "$KEY_FILE"
--iam-account "${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
gcloud projects add-iam-policy-binding "$PROJECT_ID"
--member "serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
--role roles/owner
gcloud auth activate-service-account --key-file="${HOME}/key.json"
docker push "$GCR_IMAGE_PATH"
Result: denied: Token exchange failed for project 'example-project-20181120'. Access denied.
docker google-cloud-platform gcloud
add a comment |
I've discovered a flow that works through GCP console but not through the gcloud
CLI.
Minimal Repro
The following bash snippet creates a fresh GCP project and attempts to push an image to gcr.io, but fails with "access denied" even though the user is project owner:
gcloud auth login
PROJECT_ID="example-project-20181120"
gcloud projects create "$PROJECT_ID" --set-as-default
gcloud services enable containerregistry.googleapis.com
gcloud auth configure-docker --quiet
mkdir ~/docker-source && cd ~/docker-source
git clone https://github.com/mtlynch/docker-flask-upload-demo.git .
LOCAL_IMAGE_NAME="flask-demo-app"
GCR_IMAGE_PATH="gcr.io/${PROJECT_ID}/flask-demo-app"
docker build --tag "$LOCAL_IMAGE_NAME" .
docker tag "$LOCAL_IMAGE_NAME" "$GCR_IMAGE_PATH"
docker push "$GCR_IMAGE_PATH"
Result
The push refers to repository [gcr.io/example-project-20181120/flask-demo-app]
02205dbcdc63: Preparing
06ade19a43a0: Preparing
38d9ac54a7b9: Preparing
f83363c693c0: Preparing
b0d071df1063: Preparing
90d1009ce6fe: Waiting
denied: Token exchange failed for project 'example-project-20181120'. Access denied.
The system is Ubuntu 16.04 with the latest version of gcloud 225.0.0, as of this writing. The account I auth'ed with has role roles/owner
.
Inconsistency with GCP Console
I notice that if I follow the same flow through GCP Console, I can docker push
successfully:
- Create a new GCP project via GCP Console
- Create a service account with
roles/owner
via GCP Console - Download JSON key for service account
- Enable container registry API via GCP Console
gcloud auth activate-service-account --key-file key.json
gcloud config set project $PROJECT_ID
gcloud auth configure-docker --quiet
docker tag "$LOCAL_IMAGE_NAME" "$GCR_IMAGE_PATH" && docker push "$GCR_IMAGE_PATH"
Result: Works as expected. Successfully pushes docker image to gcr.io.
Other attempts
I also tried using gcloud auth login
as my @gmail.com account, then using that account to create a service account with gcloud, but that gets the same denied
error:
SERVICE_ACCOUNT_NAME=test-service-account
gcloud iam service-accounts create "$SERVICE_ACCOUNT_NAME"
KEY_FILE="${HOME}/key.json"
gcloud iam service-accounts keys create "$KEY_FILE"
--iam-account "${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
gcloud projects add-iam-policy-binding "$PROJECT_ID"
--member "serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
--role roles/owner
gcloud auth activate-service-account --key-file="${HOME}/key.json"
docker push "$GCR_IMAGE_PATH"
Result: denied: Token exchange failed for project 'example-project-20181120'. Access denied.
docker google-cloud-platform gcloud
add a comment |
I've discovered a flow that works through GCP console but not through the gcloud
CLI.
Minimal Repro
The following bash snippet creates a fresh GCP project and attempts to push an image to gcr.io, but fails with "access denied" even though the user is project owner:
gcloud auth login
PROJECT_ID="example-project-20181120"
gcloud projects create "$PROJECT_ID" --set-as-default
gcloud services enable containerregistry.googleapis.com
gcloud auth configure-docker --quiet
mkdir ~/docker-source && cd ~/docker-source
git clone https://github.com/mtlynch/docker-flask-upload-demo.git .
LOCAL_IMAGE_NAME="flask-demo-app"
GCR_IMAGE_PATH="gcr.io/${PROJECT_ID}/flask-demo-app"
docker build --tag "$LOCAL_IMAGE_NAME" .
docker tag "$LOCAL_IMAGE_NAME" "$GCR_IMAGE_PATH"
docker push "$GCR_IMAGE_PATH"
Result
The push refers to repository [gcr.io/example-project-20181120/flask-demo-app]
02205dbcdc63: Preparing
06ade19a43a0: Preparing
38d9ac54a7b9: Preparing
f83363c693c0: Preparing
b0d071df1063: Preparing
90d1009ce6fe: Waiting
denied: Token exchange failed for project 'example-project-20181120'. Access denied.
The system is Ubuntu 16.04 with the latest version of gcloud 225.0.0, as of this writing. The account I auth'ed with has role roles/owner
.
Inconsistency with GCP Console
I notice that if I follow the same flow through GCP Console, I can docker push
successfully:
- Create a new GCP project via GCP Console
- Create a service account with
roles/owner
via GCP Console - Download JSON key for service account
- Enable container registry API via GCP Console
gcloud auth activate-service-account --key-file key.json
gcloud config set project $PROJECT_ID
gcloud auth configure-docker --quiet
docker tag "$LOCAL_IMAGE_NAME" "$GCR_IMAGE_PATH" && docker push "$GCR_IMAGE_PATH"
Result: Works as expected. Successfully pushes docker image to gcr.io.
Other attempts
I also tried using gcloud auth login
as my @gmail.com account, then using that account to create a service account with gcloud, but that gets the same denied
error:
SERVICE_ACCOUNT_NAME=test-service-account
gcloud iam service-accounts create "$SERVICE_ACCOUNT_NAME"
KEY_FILE="${HOME}/key.json"
gcloud iam service-accounts keys create "$KEY_FILE"
--iam-account "${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
gcloud projects add-iam-policy-binding "$PROJECT_ID"
--member "serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
--role roles/owner
gcloud auth activate-service-account --key-file="${HOME}/key.json"
docker push "$GCR_IMAGE_PATH"
Result: denied: Token exchange failed for project 'example-project-20181120'. Access denied.
docker google-cloud-platform gcloud
I've discovered a flow that works through GCP console but not through the gcloud
CLI.
Minimal Repro
The following bash snippet creates a fresh GCP project and attempts to push an image to gcr.io, but fails with "access denied" even though the user is project owner:
gcloud auth login
PROJECT_ID="example-project-20181120"
gcloud projects create "$PROJECT_ID" --set-as-default
gcloud services enable containerregistry.googleapis.com
gcloud auth configure-docker --quiet
mkdir ~/docker-source && cd ~/docker-source
git clone https://github.com/mtlynch/docker-flask-upload-demo.git .
LOCAL_IMAGE_NAME="flask-demo-app"
GCR_IMAGE_PATH="gcr.io/${PROJECT_ID}/flask-demo-app"
docker build --tag "$LOCAL_IMAGE_NAME" .
docker tag "$LOCAL_IMAGE_NAME" "$GCR_IMAGE_PATH"
docker push "$GCR_IMAGE_PATH"
Result
The push refers to repository [gcr.io/example-project-20181120/flask-demo-app]
02205dbcdc63: Preparing
06ade19a43a0: Preparing
38d9ac54a7b9: Preparing
f83363c693c0: Preparing
b0d071df1063: Preparing
90d1009ce6fe: Waiting
denied: Token exchange failed for project 'example-project-20181120'. Access denied.
The system is Ubuntu 16.04 with the latest version of gcloud 225.0.0, as of this writing. The account I auth'ed with has role roles/owner
.
Inconsistency with GCP Console
I notice that if I follow the same flow through GCP Console, I can docker push
successfully:
- Create a new GCP project via GCP Console
- Create a service account with
roles/owner
via GCP Console - Download JSON key for service account
- Enable container registry API via GCP Console
gcloud auth activate-service-account --key-file key.json
gcloud config set project $PROJECT_ID
gcloud auth configure-docker --quiet
docker tag "$LOCAL_IMAGE_NAME" "$GCR_IMAGE_PATH" && docker push "$GCR_IMAGE_PATH"
Result: Works as expected. Successfully pushes docker image to gcr.io.
Other attempts
I also tried using gcloud auth login
as my @gmail.com account, then using that account to create a service account with gcloud, but that gets the same denied
error:
SERVICE_ACCOUNT_NAME=test-service-account
gcloud iam service-accounts create "$SERVICE_ACCOUNT_NAME"
KEY_FILE="${HOME}/key.json"
gcloud iam service-accounts keys create "$KEY_FILE"
--iam-account "${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
gcloud projects add-iam-policy-binding "$PROJECT_ID"
--member "serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
--role roles/owner
gcloud auth activate-service-account --key-file="${HOME}/key.json"
docker push "$GCR_IMAGE_PATH"
Result: denied: Token exchange failed for project 'example-project-20181120'. Access denied.
docker google-cloud-platform gcloud
docker google-cloud-platform gcloud
edited Nov 21 '18 at 10:45
mtlynch
asked Nov 21 '18 at 10:34
mtlynchmtlynch
2,26531613
2,26531613
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
I tried to reproduce the same error using bash snippet you provided, however it successfully built the ‘flask-demo-app’ container registry image for me. I used below steps to reproduce the issue:
Step 1: Use account which have ‘role: roles/owner’ and ‘role: roles/editor’
Step 2: Created bash script using your given snippet
Step 3: Added ‘gcloud auth activate-service-account --key-file skey.json’ in script to authenticate the account
Step 4: Run the bash script
Result : It created the ‘flask-demo-app’ container registry image
This leads me to believe that there might be an issue with your environment which is causing this error for you. To troubleshoot this you could try running your code on a different machine, a different network or even on the Cloud Shell.
Thanks for investigating, Amit! I can get it to work if I create a service account as well, but my expectation is that it should also work under the root account (my gmail.com root account for GCP). In your repro, you created a separate service account. Can you do it under your root gmail account?
– mtlynch
Nov 24 '18 at 15:49
Hi sorry for late reply. Yes,I have tried with my root account which have the same permissions and it worked as well.
– Amit S
Nov 29 '18 at 22:27
Not sure what's going on then. I just tried again with gcloud 226 and got the sameAccess denied
result with both the root account and the service account I created with gcloud.
– mtlynch
Dec 2 '18 at 6:39
Based on the information given, it would appropriate to investigate this further. If you would like a deeper look into this issue, it would be my recommendation to create a private issue on Public Issue Tracker. Using Issue tracker will allow Google support agents to investigate the details of your Google Cloud Platform environment and determine whether this is intended behaviour or not for the specified product.
– Ying Li
Dec 6 '18 at 18:55
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53410165%2fdocker-push-to-gcr-io-fails-with-denied-token-exchange-failed-for-project%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I tried to reproduce the same error using bash snippet you provided, however it successfully built the ‘flask-demo-app’ container registry image for me. I used below steps to reproduce the issue:
Step 1: Use account which have ‘role: roles/owner’ and ‘role: roles/editor’
Step 2: Created bash script using your given snippet
Step 3: Added ‘gcloud auth activate-service-account --key-file skey.json’ in script to authenticate the account
Step 4: Run the bash script
Result : It created the ‘flask-demo-app’ container registry image
This leads me to believe that there might be an issue with your environment which is causing this error for you. To troubleshoot this you could try running your code on a different machine, a different network or even on the Cloud Shell.
Thanks for investigating, Amit! I can get it to work if I create a service account as well, but my expectation is that it should also work under the root account (my gmail.com root account for GCP). In your repro, you created a separate service account. Can you do it under your root gmail account?
– mtlynch
Nov 24 '18 at 15:49
Hi sorry for late reply. Yes,I have tried with my root account which have the same permissions and it worked as well.
– Amit S
Nov 29 '18 at 22:27
Not sure what's going on then. I just tried again with gcloud 226 and got the sameAccess denied
result with both the root account and the service account I created with gcloud.
– mtlynch
Dec 2 '18 at 6:39
Based on the information given, it would appropriate to investigate this further. If you would like a deeper look into this issue, it would be my recommendation to create a private issue on Public Issue Tracker. Using Issue tracker will allow Google support agents to investigate the details of your Google Cloud Platform environment and determine whether this is intended behaviour or not for the specified product.
– Ying Li
Dec 6 '18 at 18:55
add a comment |
I tried to reproduce the same error using bash snippet you provided, however it successfully built the ‘flask-demo-app’ container registry image for me. I used below steps to reproduce the issue:
Step 1: Use account which have ‘role: roles/owner’ and ‘role: roles/editor’
Step 2: Created bash script using your given snippet
Step 3: Added ‘gcloud auth activate-service-account --key-file skey.json’ in script to authenticate the account
Step 4: Run the bash script
Result : It created the ‘flask-demo-app’ container registry image
This leads me to believe that there might be an issue with your environment which is causing this error for you. To troubleshoot this you could try running your code on a different machine, a different network or even on the Cloud Shell.
Thanks for investigating, Amit! I can get it to work if I create a service account as well, but my expectation is that it should also work under the root account (my gmail.com root account for GCP). In your repro, you created a separate service account. Can you do it under your root gmail account?
– mtlynch
Nov 24 '18 at 15:49
Hi sorry for late reply. Yes,I have tried with my root account which have the same permissions and it worked as well.
– Amit S
Nov 29 '18 at 22:27
Not sure what's going on then. I just tried again with gcloud 226 and got the sameAccess denied
result with both the root account and the service account I created with gcloud.
– mtlynch
Dec 2 '18 at 6:39
Based on the information given, it would appropriate to investigate this further. If you would like a deeper look into this issue, it would be my recommendation to create a private issue on Public Issue Tracker. Using Issue tracker will allow Google support agents to investigate the details of your Google Cloud Platform environment and determine whether this is intended behaviour or not for the specified product.
– Ying Li
Dec 6 '18 at 18:55
add a comment |
I tried to reproduce the same error using bash snippet you provided, however it successfully built the ‘flask-demo-app’ container registry image for me. I used below steps to reproduce the issue:
Step 1: Use account which have ‘role: roles/owner’ and ‘role: roles/editor’
Step 2: Created bash script using your given snippet
Step 3: Added ‘gcloud auth activate-service-account --key-file skey.json’ in script to authenticate the account
Step 4: Run the bash script
Result : It created the ‘flask-demo-app’ container registry image
This leads me to believe that there might be an issue with your environment which is causing this error for you. To troubleshoot this you could try running your code on a different machine, a different network or even on the Cloud Shell.
I tried to reproduce the same error using bash snippet you provided, however it successfully built the ‘flask-demo-app’ container registry image for me. I used below steps to reproduce the issue:
Step 1: Use account which have ‘role: roles/owner’ and ‘role: roles/editor’
Step 2: Created bash script using your given snippet
Step 3: Added ‘gcloud auth activate-service-account --key-file skey.json’ in script to authenticate the account
Step 4: Run the bash script
Result : It created the ‘flask-demo-app’ container registry image
This leads me to believe that there might be an issue with your environment which is causing this error for you. To troubleshoot this you could try running your code on a different machine, a different network or even on the Cloud Shell.
answered Nov 23 '18 at 19:50
Amit SAmit S
234
234
Thanks for investigating, Amit! I can get it to work if I create a service account as well, but my expectation is that it should also work under the root account (my gmail.com root account for GCP). In your repro, you created a separate service account. Can you do it under your root gmail account?
– mtlynch
Nov 24 '18 at 15:49
Hi sorry for late reply. Yes,I have tried with my root account which have the same permissions and it worked as well.
– Amit S
Nov 29 '18 at 22:27
Not sure what's going on then. I just tried again with gcloud 226 and got the sameAccess denied
result with both the root account and the service account I created with gcloud.
– mtlynch
Dec 2 '18 at 6:39
Based on the information given, it would appropriate to investigate this further. If you would like a deeper look into this issue, it would be my recommendation to create a private issue on Public Issue Tracker. Using Issue tracker will allow Google support agents to investigate the details of your Google Cloud Platform environment and determine whether this is intended behaviour or not for the specified product.
– Ying Li
Dec 6 '18 at 18:55
add a comment |
Thanks for investigating, Amit! I can get it to work if I create a service account as well, but my expectation is that it should also work under the root account (my gmail.com root account for GCP). In your repro, you created a separate service account. Can you do it under your root gmail account?
– mtlynch
Nov 24 '18 at 15:49
Hi sorry for late reply. Yes,I have tried with my root account which have the same permissions and it worked as well.
– Amit S
Nov 29 '18 at 22:27
Not sure what's going on then. I just tried again with gcloud 226 and got the sameAccess denied
result with both the root account and the service account I created with gcloud.
– mtlynch
Dec 2 '18 at 6:39
Based on the information given, it would appropriate to investigate this further. If you would like a deeper look into this issue, it would be my recommendation to create a private issue on Public Issue Tracker. Using Issue tracker will allow Google support agents to investigate the details of your Google Cloud Platform environment and determine whether this is intended behaviour or not for the specified product.
– Ying Li
Dec 6 '18 at 18:55
Thanks for investigating, Amit! I can get it to work if I create a service account as well, but my expectation is that it should also work under the root account (my gmail.com root account for GCP). In your repro, you created a separate service account. Can you do it under your root gmail account?
– mtlynch
Nov 24 '18 at 15:49
Thanks for investigating, Amit! I can get it to work if I create a service account as well, but my expectation is that it should also work under the root account (my gmail.com root account for GCP). In your repro, you created a separate service account. Can you do it under your root gmail account?
– mtlynch
Nov 24 '18 at 15:49
Hi sorry for late reply. Yes,I have tried with my root account which have the same permissions and it worked as well.
– Amit S
Nov 29 '18 at 22:27
Hi sorry for late reply. Yes,I have tried with my root account which have the same permissions and it worked as well.
– Amit S
Nov 29 '18 at 22:27
Not sure what's going on then. I just tried again with gcloud 226 and got the same
Access denied
result with both the root account and the service account I created with gcloud.– mtlynch
Dec 2 '18 at 6:39
Not sure what's going on then. I just tried again with gcloud 226 and got the same
Access denied
result with both the root account and the service account I created with gcloud.– mtlynch
Dec 2 '18 at 6:39
Based on the information given, it would appropriate to investigate this further. If you would like a deeper look into this issue, it would be my recommendation to create a private issue on Public Issue Tracker. Using Issue tracker will allow Google support agents to investigate the details of your Google Cloud Platform environment and determine whether this is intended behaviour or not for the specified product.
– Ying Li
Dec 6 '18 at 18:55
Based on the information given, it would appropriate to investigate this further. If you would like a deeper look into this issue, it would be my recommendation to create a private issue on Public Issue Tracker. Using Issue tracker will allow Google support agents to investigate the details of your Google Cloud Platform environment and determine whether this is intended behaviour or not for the specified product.
– Ying Li
Dec 6 '18 at 18:55
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53410165%2fdocker-push-to-gcr-io-fails-with-denied-token-exchange-failed-for-project%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown