[英]with bash, is it possible to enter commands inside a docker container
[英]Run bash commands inside container with alias
我們有 docker contianers,我想通過腳本在我的容器中運行 bash 命令。 像這樣:
bin/run-in-container ls -la
容器中運行的腳本看起來像這樣:
#!/usr/bin/env bash
docker compose exec container_name bash -ic "$@"
我無法讓我的腳本解釋單引號內的所有參數。
這解釋為 | docker compose exec api bash -ic ls -la |
---|---|
但我想解釋的是 | docker compose exec api bash -ic 'ls -la' |
如果我嘗試連接一串單引號和我的參數,它會使字符轉義:
#!/usr/bin/env bash
escaped_single_qoute="'"
docker compose exec container_name bash -ic $escaped_single_qoute "$@" $escaped_single_qoute
但這解釋為:
docker compose exec api bash -ic ''\''ls' '-la'\'''
這是一個 MCVE: 帶有 Dockerfile 和代碼的要點
services:
node:
restart: unless-stopped
image: 888aaen/bash_stackoverflow:latest
volumes:
# Mount .bash_aliases file.
- "./.bash_aliases:/home/node/.bash_aliases"
腳本
#!/usr/bin/env bash
docker compose exec node bash -ic "$@"
KamilCuk提供了一個很好的解決方案,但這不能在 contianer 內使用別名運行。
docker compose exec container_name bash -ic '"$@"' _ "$@"
# usage example: ./script ls -la
# usage example: ./script sh -c "ls -la ; echo another command"
假設我們有這些別名:
# ~/.bash_aliases
alias ll='ls -l'
alias la='ls -la'
我希望能夠跑步
bin/run-in-container ll
這是可能的 | docker compose exec api bash -ic 'la src/' |
---|---|
但不與 | bin/run-in-container la src/ |
如果要傳遞單個命令,只需傳遞命令:
docker compose exec container_name "$@"
# usage example: ./script ls -la
# usage example: ./script sh -c "ls -la ; echo another command"
如果要在 bash 交互式 shell 中運行命令時傳遞具有(奇怪?)要求的單個命令,則可以轉發參數並在 shell 中執行它們:
docker compose exec container_name bash -ic '"$@"' _ "$@"
# usage example: ./script ls -la
# usage example: ./script sh -c "ls -la ; echo another command"
如果你想傳遞一個 shell 腳本,就像 eval 一樣,只需用空格連接參數:
docker compose exec container_name bash -ic "$*"
# usage example: ./script ls -la
# usage example: ./script ls -la ';' echo another command
# usage example: ./script "$(printf "%q " sh -c "ls -la ; echo another command")"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.