首页 > 解决方案 > Dockerfile 不会在 ubuntu 上执行

问题描述

在联想 Thinkpad 上的 Ubuntu 18.04.3 上运行 docker ce 19.03.5

将我的问题缩小到 Dockerfile 中的一行:

CMD ["bash","-x","/var/lib/postgresql/tendenci_startup.sh"]

这产生了以下错误:

myusuf@ubuntudt:~/$ docker logs cdb08f7ebdd1
bash: /var/lib/postgresql/tendenci_startup.sh: No such file or directory

相同的 Dockerfile 在具有相同版本 Docker 的 macOS Catalina 10.15.2 上完美运行。这里是/var/lib/postgresql/tendenci_startup.sh的内容:

echo
processes="memcached postgresql"
echo "== Starting up application processes =="

for p in $processes
do
    echo == starting $p
    service $p start
done

#su postgres -c "bash -x /var/lib/postgresql/configure_tendenci.sh"



# Run nginx in the foreground to keep the container alive
nginx -g "daemon off;"
service --status-all
date

我已经阅读了一些关于行尾之类的帖子 - 这些都没有帮助。

The content of my working directory:
myusuf@ubuntudt:~/work/docker/ws1$ ls -la
total 52
drwxr-xr-x 2 myusuf myusuf 4096 Feb  1 00:21 .
drwxr-xr-x 4 myusuf myusuf 4096 Jan 29 23:52 ..
-rw-r--r-- 1 myusuf myusuf  871 Feb  1 00:16 .bash_profile
-rw-r--r-- 1 myusuf myusuf 3310 Feb  1 00:16 .bashrc
-rw-r--r-- 1 myusuf myusuf  789 Feb  1 00:16 configure_postgres.sh
-rw-r--r-- 1 myusuf myusuf 3440 Feb  1 00:16 configure_tendenci.sh
-rw-r--r-- 1 myusuf myusuf 2295 Feb  1 00:16 Dockerfile
-rw-r--r-- 1 myusuf myusuf  437 Feb  1 00:16 generate_cert.sh
-rw-r--r-- 1 myusuf myusuf 1923 Feb  1 00:16 nginx_mysite.conf
-rw-r--r-- 1 myusuf myusuf 2159 Feb  1 00:16 sfportengineers.ddns.net.crt
-rw-r--r-- 1 myusuf myusuf 3272 Feb  1 00:16 sfportengineers.ddns.net.key
-rw-r--r-- 1 myusuf myusuf   43 Feb  1 00:16 tendenci.code-workspace
-rw-r--r-- 1 myusuf myusuf  338 Feb  1 00:16 tendenci_startup.sh
The Dockerfile:

myusuf@ubuntudt:~/work/docker/ws1$ cat Dockerfile
FROM ubuntu:18.04
LABEL maintainer="projectMaintainer"

###########################################
# for apt to be noninteractive
ENV DEBIAN_FRONTEND=noninteractive
ENV DEBCONF_NONINTERACTIVE_SEEN=true

###########################################
# preesed tzdata, update package index, upgrade packages and install needed software
RUN inetutils-ping tcpdump apt-file wget libtelnet-utils telnet && apt-file update; \
  add-apt-repository universe && apt-get install -y postgresql postgresql-contrib postgis \
  && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*


COPY .bash_profile configure_postgres.sh tendenci_startup.sh configure_tendenci.sh /var/lib/postgresql/
RUN chown postgres /var/lib/postgresql/.bash_profile
COPY .bashrc /root/

COPY nginx_mysite.conf /etc/nginx/sites-available
RUN ln -s /etc/nginx/sites-available/nginx_mysite.conf /etc/nginx/sites-enabled/nginx_mysite.conf
COPY sfportengineers.ddns.net.crt /etc/nginx/ssl/sfportengineers.ddns.net.crt
COPY sfportengineers.ddns.net.key /etc/nginx/ssl/sfportengineers.ddns.net.key

EXPOSE 80/tcp 443/tcp


RUN service --status-all; service postgresql start; sleep 10; service --status-all; \
  su postgres -c "bash /var/lib/postgresql/configure_postgres.sh"; \
  service postgresql stop; service --status-all; \
  echo "postgres ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers; \
  rm /etc/nginx/sites-enabled/default

CMD ["bash","-x","/var/lib/postgresql/tendenci_startup.sh"]

The build, run, and error:

docker build --rm -f "Dockerfile" -t local/tendenci "."
docker container run -dt --name tendenci -p 80:80 -p 8000:8000 -p 443:443 -v var_lib_postgresql:/var/lib/postgresql local/tendenci

bash: /var/lib/postgresql/tendenci_startup.sh: No such file or directory

提前致谢!

标签: dockerdockerfile

解决方案


/var/lib/postgresqlvar_lib_postgresql/

docker container run -dt --name tendenci -p 80:80 -p 8000:8000 -p 443:443 -v var_lib_postgresql:/var/lib/postgresql local/tendenci

你确定tendenci_startup.sh在你的文件夹里var_lib_postgresql/吗?


推荐阅读