Docker-compose vs manual command line executions

hi guys, so I am trying to deploy the following image osticket/osticket - Docker Image | Docker Hub

In the quick start guide, they have this command line docker run commands for both mysql and the application osticket.

Quick Start

Ensure you have a MySQL container running that osTicket can use to store its data.

docker run --name osticket_mysql -d -e MYSQL_ROOT_PASSWORD=secret \
 -e MYSQL_USER=osticket -e MYSQL_PASSWORD=secret -e MYSQL_DATABASE=osticket mariadb

Now run this image and link the MySQL container.

docker run --name osticket -d --link osticket_mysql:mysql -p 8080:80 osticket/osticket

When I execute these two commands exactly as shown above, the website works via http://localhost:8080/scp/

Now, I tried to put the same into a docker-compose.yaml file:

version: '3.8'
services:
  osticket:
    container_name: osticket-web
    image: osticket/osticket
    environment:
      MYSQL_HOST: localhost
      MYSQL_PASSWORD: secret
    depends_on:
      - db
    ports:
      - 8080:80
  db:
    container_name: osticket-db
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: osticket
      MYSQL_USER: osticket
      MYSQL_PASSWORD: secret

when I look at the status, the osticket-web exits

NAME COMMAND SERVICE STATUS PORTS
osticket-db “docker-entrypoint.s…” db running 3306/tcp, 33060/tcp
osticket-web “entrypoint” osticket exited (1)

Looking at the logs it says:

Can anyone please help with the docker-compose version does NOT work but executing the 2 docker run commands work. I’m confused.

Thanks in advanced.

The docker run command for osticket differs from the compose file. MYSQL_HOST must be the service name of the db container and not localhost.

Localhost in a container is local to the container and not the same localhost as for another container or localhost for the host.

Also: you manged to put the docker run commands in a code block, but not the compose file or the log output. I wrapped the compose file content in a preformatted text block (</> icon) and the log ouput in a blockquote (" icon). Please wrap your content in such blocks were suited, as it becomes cumbersome to read it without,

Thank you meyay,
I have lots to learn here.
So I went ahead and replaced localhost to db in MYSQL_HOST variable but still getting an error:

Install/Update osTicket
Configuring mail settings
OSTicket cron job is set to run every 5 minutes
Using external MySQL connection
Waiting for database TCP connection to become available…
Connecting to database mysql://osticket@db/osticket
************** INSTALLER FATAL ERROR ***************Unable to connect to MySQL server: The server requested authentication method unknown to the client
****************************************************Die :(%

I went ahead and deployed the 2 containers manually and had a look at the docker logs of the osticket container and see the following:

Install/Update osTicket
Configuring mail settings
OSTicket cron job is set to run every 5 minutes
Using linked MySQL container
Waiting for database TCP connection to become available…
Connecting to database mysql://osticket@mysql/osticket
Loading installation secret
Updating configuration file
Installing database. Please wait…
Database installation successful
Setting system language to en-us
Install Script finished!
Applying configuration file security
Removing setup files

I’m still not clear why this works but the docker-compose file doesn’t

Please share your current commands and the current compose file again. Lets see if they are identical this time.

Note: Each docker run argument can be translated into a compose file configuration. Both are just clients that parse either arguments or a configuration file, prepare a request with those details (which will look identical if configured identically) and send it to the docker engine that creates and starts the container(s).