Файл Dockerfile, запускаемый локально, имеет google cloud SDK, тот же файл Dockerfile в рабочей среде не

# #docker #google-cloud-sdk

Вопрос:

Наш файл Dockerfile содержит следующие строки:

 # Installing google cloud SDK for gsutil
RUN apt-get update amp;amp; 
    echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list amp;amp; 
    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg  add - amp;amp; 
    apt-get update -y amp;amp; 
    apt-get install google-cloud-sdk -y
 

Когда мы запускаем контейнер docker локально с этого изображения и docker exec -it containerID bash помещаем его в контейнер, мы получаем:

 airflow@containerID:~$ gsutil --version
gsutil version: 4.65
 

Когда мы запускаем контейнер docker в нашем вычислительном механизме GCP из этого изображения и docker exec -it containerID bash помещаем его в контейнер, мы получаем:

 airflow@containerID:~$ gsutil --version
bash: gsutil: command not found
 

Я думал, что весь смысл docker и dockerfiles заключался в том, чтобы мы могли избежать этой точной проблемы, связанной с тем, что что-то работает локально, но не в производстве… Мы в недоумении, как вообще это отладить?

Комментарии:

1. Всем привет! [qq] Вы уверены, что оба контейнера используют одно и то же изображение с одним и тем же хэшем? Вы совершенно правы, идея использования Docker состоит в том, чтобы избежать подобной ситуации, поэтому я думаю, что проблема может быть в изображении, которое, возможно, немного отличается. Я никогда раньше не сталкивался с подобной проблемой.

2. Восстановление изображения, похоже, сделало свое дело. Я не часто меняю этот файл dockerfile — возможно, он был изменен несколько недель назад, перестроен локально, но не перестроен на prod

3. Не могли бы вы дать подробный ответ о том, как вы решили эту проблему?

4. я побежал docker-compose build перестраивать изображение докера.